标签:
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int A[10][10]; int row[10][15]; int col[10][15]; int num[10][15]; int tot; struct abc { int x,y; int g; }node[90]; int flag; char s[10][10]; void DFS(int x) { int i; if(x==tot) { flag=1; return; } for(i=1;i<=9;i++) { if(row[node[x].x][i]==0) { if(col[node[x].y][i]==0) { if(num[node[x].g][i]==0) { row[node[x].x][i]=1; col[node[x].y][i]=1; num[node[x].g][i]=1; A[node[x].x][node[x].y]=i; DFS(x+1); if(flag==1) return; row[node[x].x][i]=0; col[node[x].y][i]=0; num[node[x].g][i]=0; } } } } } int main() { int T; scanf("%d",&T); while(T--) { int i,j; for(i=0;i<9;i++) scanf("%s",s[i]); for(i=1;i<=9;i++) for(j=1;j<=9;j++) A[i][j]=s[i-1][j-1]-‘0‘; memset(row,0,sizeof(row)); memset(col,0,sizeof(col)); memset(num,0,sizeof(num)); tot=0;flag=0; for(i=1;i<=9;i++) for(j=1;j<=9;j++) { if(A[i][j]==0) { node[tot].x=i; node[tot].y=j; if(i>=1&&i<=3) { if(j>=1&&j<=3) node[tot].g=1; if(j>=4&&j<=6) node[tot].g=2; if(j>=7&&j<=9) node[tot].g=3; } if(i>=4&&i<=6) { if(j>=1&&j<=3) node[tot].g=4; if(j>=4&&j<=6) node[tot].g=5; if(j>=7&&j<=9) node[tot].g=6; } if(i>=7&&i<=9) { if(j>=1&&j<=3) node[tot].g=7; if(j>=4&&j<=6) node[tot].g=8; if(j>=7&&j<=9) node[tot].g=9; } tot++; } } int g; for(i=1;i<=9;i++) { for(j=1;j<=9;j++) { if(A[i][j]!=0) row[i][A[i][j]]=1,col[j][A[i][j]]=1; if(i>=1&&i<=3) { if(j>=1&&j<=3) g=1; if(j>=4&&j<=6) g=2; if(j>=7&&j<=9) g=3; } if(i>=4&&i<=6) { if(j>=1&&j<=3) g=4; if(j>=4&&j<=6) g=5; if(j>=7&&j<=9) g=6; } if(i>=7&&i<=9) { if(j>=1&&j<=3) g=7; if(j>=4&&j<=6) g=8; if(j>=7&&j<=9) g=9; } num[g][A[i][j]]=1; } } DFS(0); for(i=1;i<=9;i++) { for(j=1;j<=9;j++) { printf("%d",A[i][j]); } printf("\n"); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/zufezzt/p/4658377.html