请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; int mp[15][15]; bool book[15][15]; char s[15]; bool f=false; int check(int x,int y) { if ((x==1 || x==2 || x==3) && (y==1 || y==2 || y==3)) return 1; if ((x==1 || x==2 || x==3) && (y==4 || y==5 || y==6)) return 2; if ((x==1 || x==2 || x==3) && (y==7 || y==8 || y==9)) return 3; if ((x==4 || x==5 || x==6) && (y==1 || y==2 || y==3)) return 4; if ((x==4 || x==5 || x==6) && (y==4 || y==5 || y==6)) return 5; if ((x==4 || x==5 || x==6) && (y==7 || y==8 || y==9)) return 6; if ((x==7 || x==8 || x==9) && (y==1 || y==2 || y==3)) return 7; if ((x==7 || x==8 || x==9) && (y==4 || y==5 || y==6)) return 8; if ((x==7 || x==8 || x==9) && (y==7 || y==8 || y==9)) return 9; } bool pan(int x,int y,int num) { for (int i=1;i<=9;i++) { if (mp[x][i]==num && i!=y) return false; } for (int i=1;i<=9;i++) { if (mp[i][y]==num && i!=x) return false; } return true; } void dfs(int x,int y) { if (f==true) return; if (x==10) { for (int i=1;i<=9;i++) { for (int j=1;j<=9;j++) printf ("%d",mp[i][j]); puts(""); } f=true; return; } if (mp[x][y]==0) { for (int i=1;i<=9;i++) { if (book[check(x,y)][i]==true) continue; if (pan(x,y,i)==true) { mp[x][y]=i; book[check(x,y)][i]=true; dfs(x+(y+1)/10,(y+1)); mp[x][y]=0; book[check(x,y)][i]=false; } } } else dfs(x+(y+1)/10,(y+1)); return; } int main() { memset(book,false,sizeof(book)); for (int i=1;i<=9;i++) { gets(s); for (int j=1;j<=9;j++) { mp[i][j]=s[j-1]-'0'; if (mp[i][j]) book[check(i,j)][mp[i][j]]=true; } } dfs(1,1); return 0; }