编程请教,可追加200分!

来源:百度知道 编辑:UC知道 时间:2024/04/28 05:39:39
数独问题:给一个9*9的方正,里面以给了一部份数,让你添满其他空格,使得9*9的方正每行每列都包含1——9九个数字各村各出现一次,并且九个3*3的方正中也要包含1——9九个数字各出现一次(第一行到第三行可划分为三个3*3方正,即第一列到第三列,第四列到第6列,第7列到第九列,依次类推划为9个3*3方正)。
题目如上,现在要编程求解,问用什么算法,时间和空间的复杂度如何计算?
重要的是算法,和算法的优劣分析!
望大家指点!

楼上的程序是错误的。主要是约束条件不对。我简单地采用分支限界法,并加上一个栈来存储已经得到的答案。
因为不想写栈结构,所以使用java语言。一共有3个类Test、Pos和Max。代码如下:
public class Pos {
int row;
int col;
int val;

Pos (int row, int col) {
this (row, col, -1);
}

Pos (int row, int col, int val) {
this.row = row;
this.col = col;
this.val = val;
}
}
********************************************************
import java.lang.*;
import java.util.Stack;

public class Max {
int m[][];
Stack stack;

Max (int max[][]) {
this.m = new int[max.length][max[0].length];
for (int i=0; i<max[0].length; i++)
for (int j=0; j<max[i].length; j++)
this.m[i][j] = max[i][j];
this.stack = new Stack();
}

public void fill () {
boolean has_zero = is_find_zero();
while (has_zero) {
Pos p = (Pos)this.stack.pop();
while (p.val < 10) {
if (