标签:max 输入 技术 src script led 方向 nbsp 输出
4 9 1 7 3 6 5 2 8
2 3 7 8 1 5 6 4 9
5 6 8 2 4 9 7 3 1
9 1 3 6 5 4 8 7 2
8 5 4 9 7 2 1 6 3
7 2 6 3 8 1 9 5 4
3 4 9 5 6 8 2 1 7
1 8 5 4 2 7 3 9 6
6 7 2 1 9 3 4 8 5
注意输出格式
#include <cstdio> #include <cstring> using namespace std; int i,j,k,n,m,x,y,t,a[10][10],b[10][10],ans[10][10]; bool b1[10][10],b2[10][10],b3[10][10],b4[10],flag=false; char s[20]; int calc(int x,int y){return (((x-1)/3+1)-1)*3+((y-1)/3+1);} int min(int x,int y){return x<y?x:y;} int max(int x,int y){return x>y?x:y;} void dfs(int mn,int mx,int x,int y){ if (x==10){flag=true;return;} for (int i=mn;i<=mx;i++)if (!b1[i][x]&&!b2[i][y]&&!b3[i][calc(x,y)]){ b1[i][x]=1;b2[i][y]=1;b3[i][calc(x,y)]=1;ans[x][y]=i; if (y==9){ if (b[x+1][1]==0)dfs(1,9,x+1,1); else if (b[x+1][1]==1)dfs(1,ans[x][1],x+1,1); else if (b[x+1][1]==2)dfs(ans[x][1],9,x+1,1); if (flag)return; } else{ if (b[x][y+1]==0){ if (a[x][y+1]==0)dfs(1,9,x,y+1); else if (a[x][y+1]==1)dfs(1,ans[x][y],x,y+1); else if (a[x][y+1]==2)dfs(ans[x][y],9,x,y+1); } else if (b[x][y+1]==1){ if (a[x][y+1]==0)dfs(1,ans[x-1][y+1],x,y+1); else if (a[x][y+1]==1)dfs(1,min(ans[x][y],ans[x-1][y+1]),x,y+1); else if (a[x][y+1]==2)dfs(ans[x][y],ans[x-1][y+1],x,y+1); } else if (b[x][y+1]==2){ if (a[x][y+1]==0)dfs(ans[x-1][y+1],9,x,y+1); else if (a[x][y+1]==1)dfs(ans[x-1][y+1],ans[x][y],x,y+1); else if (a[x][y+1]==2)dfs(max(ans[x-1][y+1],ans[x][y]),9,x,y+1); } if (flag)return; } b1[i][x]=0;b2[i][y]=0;b3[i][calc(x,y)]=0; } return; } int main(){ for (i=1;i<=15;i++){ if (((i-1)%5+1)&1){ x++;y=0;gets(s); for (k=0;k<strlen(s);k++) if (s[k]==‘>‘){y++;if (y==1)a[x][2]=1;else if (y==2)a[x][3]=1;else if (y==3)a[x][5]=1;else if(y==4)a[x][6]=1;else if (y==5)a[x][8]=1;else if (y==6)a[x][9]=1;} else if(s[k]==‘<‘){y++;if (y==1)a[x][2]=2;else if (y==2)a[x][3]=2;else if (y==3)a[x][5]=2;else if(y==4)a[x][6]=2;else if (y==5)a[x][8]=2;else if (y==6)a[x][9]=2;} } else{y=0;gets(s);for (k=0;k<strlen(s);k++)if (s[k]==‘v‘)b[x+1][++y]=1;else if (s[k]==‘^‘)b[x+1][++y]=2;} if (i!=15)scanf("\n"); } dfs(1,9,1,1); for (i=1;i<=9;i++){for (j=1;j<=8;j++)printf("%d ",ans[i][j]);printf("%d\n",ans[i][9]);} return 0; }
标签:max 输入 技术 src script led 方向 nbsp 输出
原文地址:http://www.cnblogs.com/Acheing/p/6786496.html