标签:
7 1 2 ? 6 ? 3 5 8 ? 6 5 2 ? 7 1 ? 4 ? ? 8 5 1 3 6 7 2 9 2 4 ? 5 6 ? 3 7 5 ? 6 ? ? ? 2 4 1 1 ? 3 7 2 ? 9 ? 5 ? ? 1 9 7 5 4 8 6 6 ? 7 8 3 ? 5 1 9 8 5 9 ? 4 ? ? 2 3
7 1 2 4 6 9 3 5 8 3 6 5 2 8 7 1 9 4 4 9 8 5 1 3 6 7 2 9 2 4 1 5 6 8 3 7 5 7 6 3 9 8 2 4 1 1 8 3 7 2 4 9 6 5 2 3 1 9 7 5 4 8 6 6 4 7 8 3 2 5 1 9 8 5 9 6 4 1 7 2 3
#include <iostream> #include<cstdio> #include<cstring> using namespace std; char ch[2]; int a[10][10]; int i,j,flag,l,p; struct node { int x,y; }s[100]; int check1(int x,int y,int num) { for(int i=0;i<9;i++) if(a[x][i]==num) return 0; return 1; } int check2(int x,int y,int num) { for(int i=0;i<9;i++) if(a[i][y]==num) return 0; return 1; } int check3(int x,int y,int num) { int l,r,u,v; r=(x/3+1)*3-1; l=r-2; //l=x/3*3; v=(y/3+1)*3-1; u=v-2; for(int i=l;i<=r;i++) for(int j=u;j<=v;j++) if (a[i][j]==num) return 0; return 1; } void dfs(int k) { if(flag) return; if (k>l) { flag=1; return; } int x=s[k].x; int y=s[k].y; for(int i=1;i<=9;i++) { if (check1(x,y,i) && check2(x,y,i) && check3(x,y,i)) { a[x][y]=i; dfs(k+1); if (flag) return; a[x][y]=0; } } return; } int main() { p=0; while(~scanf("%s",&ch)) { l=-1; for(i=0;i<9;i++) for(j=0;j<9;j++) { if (i==0 && j==0) { if(ch[0]>‘0‘ && ch[0]<=‘9‘) a[i][j]=ch[0]-‘0‘; else { a[i][j]=0; s[++l].x=i; s[l].y=j; } continue; } scanf("%s",&ch); if(ch[0]>‘0‘ && ch[0]<=‘9‘) a[i][j]=ch[0]-‘0‘; else { a[i][j]=0; s[++l].x=i; s[l].y=j; } } flag=0; dfs(0); if (p++) printf("\n"); for(i=0;i<9;i++) { for(j=0;j<8;j++) printf("%d ",a[i][j]); printf("%d\n",a[i][8]); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/stepping/p/5667499.html