目测读入re,但是没有一点头绪。
样例:
100000000
000100000
000000100
010000000
000010000
000000010
001000000
000001000
000000020
代码:\
#include<bits/stdc++.h>
#define for_all1(a,b) {for(int i=1;i<10;i++){\
for(int j=1;j<10;j++)\
{a;};\
{b;};\
}}
#define for_all2(a) {for(int i=1;i<10;i++)\
{a;};\
}
#define print() {for_all1((cout<<sd[i][j]<<' '),(cout<<endl));exit(0);}
#define dfs_next(x,y) {if((x)==9&&(y)==9){print();}\
else if((y)==9)dfs((x)+1,1);\
else dfs((x),(y)+1);\
}
#define clac(x,y) (((x)-1)/3*3+((y)-1)/3+1)
#define tr(x,y,z) (!hg[(x)][(z)]&&!le[(y)][(z)]&&!gz[clac((x),(y))][(z)])
using namespace std;
int sd[15][15],hg[15][15],le[15][15],gz[15][15];
void dfs(int x,int y){
//cerr<<x<<' '<<y<<endl;
if(sd[x][y]){dfs_next(x,y);}
else for_all2({
if(!tr(x,y,i))continue;
sd[x][y]=i;
hg[x][i]=le[y][i]=gz[clac(x,y)][i]=1;
dfs_next(x,y);
sd[x][y]=0;
hg[x][i]=le[y][i]=gz[clac(x,y)][i]=0;
})
}
int main(){
for_all1({
cin>>sd[i][j];
//cerr<<i<<' '<<j<<' '<<clac(i,j)<<endl;
if(sd[i][j])hg[i][sd[i][j]]=le[j][sd[i][j]]=gz[clac(i,j)][sd[i][j]]=1;
//cerr<<i<<' '<<j<<endl;
},{})
dfs(1,1);
cout<<0<<endl;
return 0;
}