数独
#include<stdio.h> int map[9][9]; int vistx[10][10]; int visty[10][10]; int vistkuai[10][10]; int flag=0; int cass; /*int safe(int x,int y,int xx) { for(int i=0;i<9;i++) { if(map[x][i]==xx||map[i][y]==xx) return 0;
} for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { if(map[(x/3)*3+i][(y/3)*3+j]==xx) return 0; } } return 1; }*/ void shudu(int a) { if(flag==1) return; if(a==81) { flag=1; for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { printf("%d ",map[i][j]); } printf("\n"); } return; } int x=a/9; int y=a%9; if(map[a/9][a%9]==0) { for(int i=1;i<=9;i++) { if(vistx[x][i]==0&&visty[y][i]==0&&vistkuai[x/3*3+y/3][i]==0) { vistx[x][i]=1; visty[y][i]=1; vistkuai[x/3*3+y/3][i]=1; map[x][y]=i; shudu(a+1); map[x][y]=0; vistx[x][i]=0; visty[y][i]=0; vistkuai[x/3*3+y/3][i]=0; } } } else shudu(a+1); } int main() { freopen("in.txt","r",stdin); scanf("%d",&cass); while(cass--) { for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { scanf("%d",&map[i][j]); if(map[i][j]!=0) { vistx[i][map[i][j]]=1; visty[j][map[i][j]]=1; vistkuai[i/3*3+j/3][map[i][j]]=1; } } } shudu(0); } return 0; }