@shixinyi
2017-10-09T10:44:18.000000Z
字数 1049
阅读 415
order
//Serene#include<algorithm>#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<cmath>using namespace std;const int maxn=12;int ans[maxn][maxn];bool h[maxn][maxn],le[maxn][maxn],ge[maxn][maxn],ok=0;int aa;char cc;int read() {aa=0;cc=getchar();while(cc<'0'||cc>'9') cc=getchar();while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();return aa;}int get_ge(int x,int y) {x=(x-1)/3+1;y=(y-1)/3+1;return (x-1)*3+y;}bool kz(int x,int y,int num) {if(!num) return 0;int gg=get_ge(x,y);if(h[x][num]) return 0;if(le[y][num]) return 0;if(ge[gg][num]) return 0;h[x][num]=le[y][num]=ge[gg][num]=1;return 1;}void p() {ok=1;for(int i=1;i<=9;++i) {printf("%d",ans[i][1]);for(int j=2;j<=9;++j) printf(" %d",ans[i][j]);printf("\n");}}void s(int x,int y) {if(x>9) p();if(ok) return;int xx,yy;xx=x;yy=y+1;xx+=yy/10;yy=(yy-1)%9+1;if(ans[x][y]) s(xx,yy);else {for(int i=1;i<=9&&!ok;++i) if(kz(x,y,i)){ans[x][y]=i; s(xx,yy);h[x][i]=le[y][i]=ge[get_ge(x,y)][i]=0;}ans[x][y]=0;}}int main() {for(int i=1;i<=9;++i) for(int j=1;j<=9;++j) ans[i][j]=read(),kz(i,j,ans[i][j]);s(1,1);return 0;}