首页 > 代码库 > 数独问题(南阳)
数独问题(南阳)
#include<iostream> using namespace std; int begin[9][9]; bool check(int x,int y,int k) { for(int i=0;i<9;i++) if(begin[i][y]==k) return false; for(int j=0;j<9;j++) if(begin[x][j]==k) return false; int sx=(x/3)*3; int sy=(y/3)*3; for(int i=sx;i<sx+3;i++) for(int j=sy;j<sy+3;j++) if(begin[i][j]==k) return false; return true; } bool dfs(int x,int y) { if(begin[x][y])//这个if用来深度搜索 { if(y+1<9) { if(dfs(x,y+1))//y++也就是遍历第一行 return true; } else if(x+1<9) { if(dfs(x+1,0))// 当列不能再加的时候再从第二行的第一列开始循环; return true; } else return true; } else { for(int k=1;k<=9;k++) { if(check(x,y,k)) { begin[x][y]=k; if(y+1<9) { if(dfs(x,y+1)) return true; } else if(x+1<9) { if(dfs(x+1,0)) return true; } else return true; begin[x][y]=0; } } } return false; } int main() { int t; cin>>t; while(t--) { for(int i=0;i<9;i++) for(int j=0;j<9;j++) cin>>begin[i][j]; dfs(0,0); for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { cout<<begin[i][j]<<" "; } cout<<endl; } } //system("pause"); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。