标签:
你一定听说过“数独”游戏。//数独问题 # include <iostream> # include <cstring> # include <fstream> using namespace std; int map[9][9]; void display(){ int i,j; for(i=0;i<9;i++){ for(j=0;j<9;j++){ cout<<map[i][j]<<" "; } cout<<endl; } } bool check(int c){ int x,y,i,j,dx,dy; x=c/9; y=c%9; for(i=0;i<9;i++){ if(map[i][y]==map[x][y]&&x!=i) return false; } for(j=0;j<9;j++){ if(map[x][j]==map[x][y]&&y!=j) return false; } dx=x/3*3; dy=y/3*3; for(i=dx;i<dx+3;i++){ for(j=dy;j<dy+3;j++){ if(map[i][j]==map[x][y]&&i!=x&&j!=y) return false; } } return true; } void backtrack(int n){ int x,y; if(n==81){ //if(check(80)) display(); cout<<endl; return ; } x=n/9; y=n%9; if(map[x][y]==0){ for(int k=1;k<=9;k++){ map[x][y]=k; if(check(n)){ backtrack(n+1); } map[x][y]=0; //请注意此处应当清零,如果不清零下一次就没有办法触发!!! } map[x][y]==0; return; } else{ backtrack(n+1); } } int main(){ int i,j; fstream in("shudu.txt"); for(i=0;i<9;i++){ for(j=0;j<9;j++){ in>>map[i][j]; } } backtrack(0); return 0; }
提交时,注意选择所期望的编译器类型。
用回朔法求数独的运算理解上是挺简单的,写起来的时候注意一下几个要点,就不会有什么问题了,下面是我的代码,没有优化过,如果有什么不妥的地方请评论或者私信
标签:
原文地址:http://blog.csdn.net/haoge9551/article/details/44513945