`
lc_wangchao
  • 浏览: 34163 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个解数独的程序

阅读更多
只会用递归……

Sudoku::resolve()方法用来求出数独的解。代码如下

bool Sudoku::resolve(){
	int x,y;
	int solve = getFirstUnset(&x,&y);
	int list[10];
	if(solve==0){
		for(int i=0;i<9;i++){
			for(int j=0;j<9;j++){
				answer[i][j] = puzzle[i][j];
			}
		}
		return true;
	}else if(solve==1){
		getNumList(x,y,list);
		for(int tmp=1;tmp<=9;tmp++){
			if(list[tmp]==0){
				continue;
			}
			Sudoku s(*this);
			s.setNumberinPosition(x,y,tmp);
			if(s.resolve()){
				for(int tmpi=0;tmpi<9;tmpi++){
					for(int tmpj=0;tmpj<9;tmpj++){
						answer[tmpi][tmpj] = s.answer[tmpi][tmpj];
					}
				}
				resolveFlag = true;
				return true;
			}
		}
	}
	return false;
}



当要解一个数独时,首先在第一个没有设置数字的位置放置一个适当的数,然后再调用新的Sudoku类的resolve,直到解出为止。

附件为全部代码。vc与g++下编译通过。
0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics