2012蓝桥杯决赛试题最后一题答案
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int map[7][7]; int num[7][7]; char H[6]; int ff=0; int n=1; void dfs(int x,int y) { int i,j; if(x==6) { ff=1; cout<<n++<<endl; for(i=0;i<=5;i++) { for(j=0;j<=5;j++) { printf("%c",H[map[i][j]]); } printf("\n"); } return ; } int div=num[x][y]; int f=0; if(map[x][y]==-1) for(i=0;i<=5;i++) { f=0; for(j=0;j<6;j++) if(map[j][y]==i) {f=1;break;} for(j=0;j<6;j++) if(map[x][j]==i) {f=1;break;} for(j=0;j<=5;j++) for(int k=0;k<=5;k++) if(num[j][k]==div&&map[j][k]==i) {f=1;break;} if(f) continue; map[x][y]=i; if(y<=4) dfs(x,y+1); else dfs(x+1,0); map[x][y]=-1; } else { if(y<=4) dfs(x,y+1); else dfs(x+1,0); } return ; } int pre[10010],now[10010]; void init() { memset(map,-1,sizeof(map)); memset(num,-1,sizeof(num)); H[0]='A'; H[1]='B'; H[2]='C'; H[3]='D'; H[4]='E'; H[5]='F'; ff=0; } int main() { int i,j; int T; char str[7]; init(); for(i=0;i<=5;i++) { scanf("%s",&str); for(j=0;j<=5;j++) num[i][j]=str[j]-'0'; } //cout<<"ok"<<endl; scanf("%d",&T); while(T--) { scanf("%s",&str); map[str[0]-'0'][str[1]-'0']=str[2]-'A'; } //cout<<"ok"<<endl; dfs(0,0); if(!ff) printf("无解\n"); return 0; }