---------------------------------------------------------------------------------------------------------------------------------
#include这是一道非常简(ě)单(xīn)的dfs题,其实没(yòu)有(méi)什(A)么(C)难度#include #include using namespace std; int a[14][14]; bool check(int x,int y,int z) //检查每一个横行、纵列、宫格中有无重复数字 { for(int i=1;i<=9;i++) //横行 { if(a[x][i]==z) return false; } for(int i=1;i<=9;i++) //纵列 { if(a[i][y]==z) return false; } for(int i=1;i<=3;i++) //宫格 { for(int j=1;j<=3;j++) { if(a[(x-1)/3*3+i][(y-1)/3*3+j]==z) return false; } } return true; } bool dfs(int x,int y) //深搜枚举数字 { if(y>9) //当一行枚举完后跳到下一行 { y=1; x++; } if(x>9) //当枚举到9,9位置时结束递归 return true; if(a[x][y]!=0) return dfs(x,y+1); for(int i=1;i<=9;i++) { if(check(x,y,i)) { a[x][y]=i; if(dfs(x,y+1)) { return true; } a[x][y]=0; } } return false; } int main() { for(int i=1;i<=9;i++) //输入 { for(int j=1;j<=9;j++) { cin>>a[i][j]; } } dfs(1,1); //递归起点:矩阵中1,1的位置 for(int i=1;i<=9;i++) //输出 { for(int j=1;j<=9;j++) { cout<



