爆搜即可
/* *********************************************** author : email :523689985@qq.com created time :2015/12/1 15:46:23 file name :main.cpp ************************************************ */ #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int maxn=10; int r[maxn][maxn],c[maxn][maxn],q[maxn][maxn]; int T; char Map[maxn][maxn]; int ans[maxn][maxn]; int Qx[maxn*maxn],Qy[maxn*maxn]; int tot; int flag; int F(int x,int y) { if(x==0||x==1) { if(y<=1) return 0; else return 1; } else { if(y<=1) return 2; else return 3; } } void dfs(int Now) { if(Now==tot) { flag=1; return; } int nowX=Qx[Now]; int nowY=Qy[Now]; for(int i=1;i<=4;i++) { if(r[nowX][i]==0&&c[nowY][i]==0&&q[F(nowX,nowY)][i]==0) { r[nowX][i]=c[nowY][i]=q[F(nowX,nowY)][i]=1; ans[nowX][nowY]=i; dfs(Now+1); if(flag) return; r[nowX][i]=c[nowY][i]=q[F(nowX,nowY)][i]=0; } } } int main() { scanf("%d",&T); for(int Case=1;Case<=T;Case++) { memset(r,0,sizeof r); memset(c,0,sizeof c); memset(q,0,sizeof q); tot=0; flag=0; for(int i=0;i<4;i++) scanf("%s",Map[i]); for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { if(Map[i][j]=='*') { ans[i][j]=-1; Qx[tot]=i; Qy[tot]=j; tot++; } else { ans[i][j]=Map[i][j]-'0'; r[i][ans[i][j]]=1; c[j][ans[i][j]]=1; q[F(i,j)][ans[i][j]]=1; } } } flag=0; dfs(0); printf("Case #%d: ",Case); for(int i=0;i<4;i++) { for(int j=0;j<4;j++) printf("%d",ans[i][j]); printf(" "); } } return 0; }