http://acm.hdu.edu.cn/showproblem.php?pid=1426
注意输入问题就行
还是dfs
#include<stdio.h> #include<string.h> #include<algorithm> #include<stdlib.h> #include<math.h> #include<iostream> using namespace std; #define N 100 #define INF 0xffffffff #define memset(a,b) memset(a,b,sizeof(a)) int a[N][N],v1[N][N],v2[N][N],v3[N][N]; int ok=0,sum; struct node { int x,y; } e[N]; void DFS(int p) { if(p>sum) { ok=1; return; } for(int i=1; i<=9; i++) { if(!ok) if(v1[e[p].x][i]==0 && v2[e[p].y][i]==0 && v3[(e[p].x/3)*3+e[p].y/3+1][i]==0) { v1[e[p].x][i]=1; v2[e[p].y][i]=1; v3[e[p].x/3*3+e[p].y/3+1][i]=1; a[e[p].x][e[p].y]=i; DFS(p+1); v1[e[p].x][i]=0; v2[e[p].y][i]=0; v3[e[p].x/3*3+e[p].y/3+1][i]=0; } } } int main() { char str[50]; int k=0,flag=0,b=0; sum=0; memset(a,0); memset(v1,0); memset(v2,0); memset(v3,0); while(scanf("%s",str)!=EOF) { if(str[0]=='?') { a[k][b]=0; sum++; e[sum].x=0; e[sum].y=0; b++; } else { a[0][0]=str[0]-'0'; v1[0][a[0][0]]=1; v2[0][a[0][0]]=1; v3[1][a[0][0]]=1; } for(int i=0; i<9; i++) { for(int j=0; j<9; j++) { if(i==0 && j==0) continue; scanf("%s",str); if(str[0]=='?') { a[i][j]=0; sum++; e[sum].x=i; e[sum].y=j; b++; } else { a[i][j]=str[0]-'0'; v1[i][a[i][j]]=1; v2[j][a[i][j]]=1; v3[i/3*3+j/3+1][a[i][j]]=1; } } } DFS(1); if(flag==1) printf(" "); for(int i=0; i<9; i++) { for(int j=0; j<9; j++) { if(j==0) printf("%d",a[i][j]); else printf(" %d",a[i][j]); } printf(" "); } flag=1; k=0; sum=0; ok=0; b=0; memset(a,0); memset(v1,0); memset(v2,0); memset(v3,0); } return 0; }