题解 P4205 【[NOI2005]智障珠游戏 】

Fellyhosn

2018-10-17 21:56:12

Solution

# 题解 P4205 [NOI2005]智慧珠游戏 ![](https://cdn.luogu.com.cn/upload/pic/38300.png) ### 先给大家简述一下题意:(不会玩智慧珠游戏的自己去百度一下) 写一个程序解决骨灰级智慧珠问题(只给出$1$~$3$个块,你需要自己填完剩下的$9$~$11$块) 数据保证至多有一组解。 ### 假装分析一下:这是所有块的形状 ![](https://cdn.luogu.com.cn/upload/pic/13768.png) 由于图形可以旋转、翻折、~~跳跃~~,所以要先把12个零件的所有形状枚举出来: - A:4种 - B:2种 - C:8种 - D:1种 - E:4种 - F:8种 - G:4种 - H:8种 - I:8种 - J:1种 - K:4种 - L:8种 ### 总共只有60种情况,如果你觉得多的话请跳过此题解。 ### 如果你不想用搜索做,请跳过此题解。 每次从上到下,从做到右找出第一个没有被放零件的格子。56种情况一一枚举就行了(**剪枝想怎么搞怎么搞只要是对的就OK了**)注意回溯。 听说有个点会卡顺序搜,那么就可以换个方向就行了(**或者卡个搜索次数**) ** 代码不长,刚过千行。没有猪国杀的变态,没有mayan游戏的玄学,没有A+B问题的变幻无常,没有任何超纲。阻挡你向前的只是你的懒惰,是你的习得性无助。学OI的意义是什么?成为dalao的意义是什么?只有成为真正的码农,才无愧于你的内心。** ~~~ #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; char id(int x){ return (char)(x+'A'-1); } int gi(){ char x=getchar(); while(x!='.'&&(x>'Z'||x<'A')) x=getchar(); return x=='.'?0:(int)(x-'A'+1); } int a[16][16],ti; bool in[15]; int get(){ for(int i=1;i<=10;i++){ for(int j=1;j<=i;j++) if(a[j][i]==0){ return j*100+i; } } } bool ok(){ for(int o=1;o<=12;o++) if(in[o]==false) return false; return true; } void init(){ memset(a,-1,sizeof(a)); memset(in,0,sizeof(in)); for(int i=1;i<=10;i++){ for(int j=1;j<=i;j++){ a[j][i]=gi(); in[a[j][i]]=true; } } for(int i=1;i<=10;i++){ for(int j=1;j<=i;j++){ if(a[j][i]==-1) { a[j][i]=0; } } } } void print(){ for(int i=1;i<=10;i++){ for(int j=1;j<=i;j++){ cout<<id(a[j][i]); } cout<<endl; } } void dfs(){ ti++; if(ti>=3000000){ printf("No solution"); exit(0); }//卡搜索次数 //可以玄学证明:如果有解那么深搜的最大次数不会超过3e6 if(ok()) { print(); exit(0); } int zt=get(); int px=zt/100; int py=zt%10; if(py==0) py=10; //A:4cases if(!in[1]){ if(a[px+1][py]==0&&a[px][py+1]==0){ a[px][py]=1; a[px+1][py]=1; a[px][py+1]=1; in[1]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px][py+1]=0; in[1]=false; } if(a[px][py+1]==0&&a[px+1][py+1]==0){ a[px][py]=1; a[px][py+1]=1; a[px+1][py+1]=1; in[1]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px+1][py+1]=0; in[1]=false; } if(a[px][py+1]==0&&a[px-1][py+1]==0){ a[px][py]=1; a[px][py+1]=1; a[px-1][py+1]=1; in[1]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px-1][py+1]=0; in[1]=false; } if(a[px+1][py]==0&&a[px+1][py+1]==0){ a[px][py]=1; a[px+1][py]=1; a[px+1][py+1]=1; in[1]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+1][py+1]=0; in[1]=false; } } //B:2cases if(!in[2]){ if(a[px+1][py]==0&&a[px+2][py]==0&&a[px+3][py]==0){ a[px][py]=2; a[px+1][py]=2; a[px+2][py]=2; a[px+3][py]=2; in[2]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+2][py]=0; a[px+3][py]=0; in[2]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px][py+3]==0){ a[px][py]=2; a[px][py+1]=2; a[px][py+2]=2; a[px][py+3]=2; in[2]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px][py+3]=0; in[2]=false; } } //C:8cases if(!in[3]){ if(a[px+1][py]==0&&a[px+2][py]==0&&a[px][py+1]==0){ a[px][py]=3; a[px+1][py]=3; a[px+2][py]=3; a[px][py+1]=3; in[3]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+2][py]=0; a[px][py+1]=0; in[3]=false; } if(a[px+1][py]==0&&a[px+1][py+1]==0&&a[px+1][py+2]==0){ a[px][py]=3; a[px+1][py]=3; a[px+1][py+1]=3; a[px+1][py+2]=3; in[3]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+1][py+1]=0; a[px+1][py+2]=0; in[3]=false; } if(a[px+1][py]==0&&a[px][py+1]==0&&a[px][py+2]==0) { a[px][py]=3; a[px+1][py]=3; a[px][py+1]=3; a[px][py+2]=3; in[3]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px][py+1]=0; a[px][py+2]=0; in[3]=false; } if(a[px+1][py]==0&&a[px+2][py]==0&&a[px+2][py+1]==0){ a[px][py]=3; a[px+2][py]=3; a[px+2][py+1]=3; a[px+1][py]=3; in[3]=true; dfs(); a[px][py]=0; a[px+2][py]=0; a[px+2][py+1]=0; a[px+1][py]=0; in[3]=false; } if(a[px+1][py+2]==0&&a[px][py+2]==0&&a[px][py+1]==0){ a[px][py]=3; a[px+1][py+2]=3; a[px][py+2]=3; a[px][py+1]=3; in[3]=true; dfs(); a[px][py]=0; a[px+1][py+2]=0; a[px][py+2]=0; a[px][py+1]=0; in[3]=false; } if(a[px-1][py+2]==0&&a[px][py+1]==0&&a[px][py+2]==0) { a[px][py]=3; a[px-1][py+2]=3; a[px][py+1]=3; a[px][py+2]=3; in[3]=true; dfs(); a[px][py]=0; a[px-1][py+2]=0; a[px][py+1]=0; a[px][py+2]=0; in[3]=false; } if(a[px][py+1]==0&&a[px+1][py+1]==0&&a[px+2][py+1]==0){ a[px][py]=3; a[px][py+1]=3; a[px+1][py+1]=3; a[px+2][py+1]=3; in[3]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px+1][py+1]=0; a[px+2][py+1]=0; in[3]=false; } if(a[px][py+1]==0&&a[px-1][py+1]==0&&a[px-2][py+1]==0){ a[px][py]=3; a[px][py+1]=3; a[px-1][py+1]=3; a[px-2][py+1]=3; in[3]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px-1][py+1]=0; a[px-2][py+1]=0; in[3]=false; } } //D:1case if(!in[4]){ if(a[px][py+1]==0&&a[px+1][py+1]==0&&a[px+1][py]==0){ a[px][py]=4; a[px][py+1]=4; a[px+1][py+1]=4; a[px+1][py]=4; in[4]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px+1][py+1]=0; a[px+1][py]=0; in[4]=false; } } //E:4cases if(!in[5]){ if(a[px+1][py]==0&&a[px+2][py]==0&&a[px][py+1]==0&&a[px][py+2]==0) { a[px][py]=5; a[px+1][py]=5; a[px+2][py]=5; a[px][py+1]=5; a[px][py+2]=5; in[5]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+2][py]=0; a[px][py+1]=0; a[px][py+2]=0; in[5]=false; } if(a[px+1][py]==0&&a[px+2][py]==0&&a[px][py-1]==0&&a[px][py-2]==0) { a[px][py]=5; a[px+1][py]=5; a[px+2][py]=5; a[px][py-1]=5; a[px][py-2]=5; in[5]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+2][py]=0; a[px][py-1]=0; a[px][py-2]=0; in[5]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px+1][py+2]==0&&a[px+2][py+2]==0){ a[px][py]=5; a[px][py+1]=5; a[px][py+2]=5; a[px+1][py+2]=5; a[px+2][py+2]=5; in[5]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px+1][py+2]=0; a[px+2][py+2]=0; in[5]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px-1][py+2]==0&&a[px-2][py+2]==0){ a[px][py]=5; a[px][py+1]=5; a[px][py+2]=5; a[px-1][py+2]=5; a[px-2][py+2]=5; in[5]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px-1][py+2]=0; a[px-2][py+2]=0; in[5]=false; } } //F:8cases if(!in[6]){ if(a[px-1][py+1]==0&&a[px][py+1]==0&&a[px+1][py+1]==0&&a[px+2][py+1]==0){ a[px][py]=6; a[px-1][py+1]=6; a[px][py+1]=6; a[px+1][py+1]=6; a[px+2][py+1]=6; in[6]=true; dfs(); a[px][py]=0; a[px-1][py+1]=0; a[px][py+1]=0; a[px+1][py+1]=0; a[px+2][py+1]=0; in[6]=false; } if(a[px-1][py+1]==0&&a[px][py+1]==0&&a[px+1][py+1]==0&&a[px-2][py+1]==0) { a[px][py]=6; a[px-1][py+1]=6; a[px][py+1]=6; a[px+1][py+1]=6; a[px-2][py+1]=6; in[6]=true; dfs(); a[px][py]=0; a[px-1][py+1]=0; a[px][py+1]=0; a[px+1][py+1]=0; a[px-2][py+1]=0; in[6]=false; } if(a[px+1][py+1]==0&&a[px+1][py]==0&&a[px+2][py]==0&&a[px+3][py]==0) { a[px][py]=6; a[px+1][py+1]=6; a[px+1][py]=6; a[px+2][py]=6; a[px+3][py]=6; in[6]=true; dfs(); a[px][py]=0; a[px+1][py+1]=0; a[px+1][py]=0; a[px+2][py]=0; a[px+3][py]=0; in[6]=false; } if(a[px+1][py]==0&&a[px+2][py+1]==0&&a[px+2][py]==0&&a[px+3][py]==0) { a[px][py]=6; a[px+1][py]=6; a[px+2][py+1]=6; a[px+2][py]=6; a[px+3][py]=6; in[6]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+2][py+1]=0; a[px+2][py]=0; a[px+3][py]=0; in[6]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px][py+3]==0&&a[px+1][py+1]==0){ a[px][py]=6; a[px][py+1]=6; a[px][py+2]=6; a[px][py+3]=6; a[px+1][py+1]=6; in[6]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px][py+3]=0; a[px+1][py+1]=0; in[6]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px][py+3]==0&&a[px-1][py+1]==0) { a[px][py]=6; a[px][py+1]=6; a[px][py+2]=6; a[px][py+3]=6; a[px-1][py+1]=6; in[6]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px][py+3]=0; a[px-1][py+1]=0; in[6]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px][py+3]==0&&a[px+1][py+2]==0) { a[px][py]=6; a[px][py+1]=6; a[px][py+2]=6; a[px][py+3]=6; a[px+1][py+2]=6; in[6]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px][py+3]=0; a[px+1][py+2]=0; in[6]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px][py+3]==0&&a[px-1][py+2]==0) { a[px][py]=6; a[px][py+1]=6; a[px][py+2]=6; a[px][py+3]=6; a[px-1][py+2]=6; in[6]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px][py+3]=0; a[px-1][py+2]=0; in[6]=false; } } //G:4cases if(!in[7]){ if(a[px][py+1]==0&&a[px+1][py]==0&&a[px+2][py+1]==0&&a[px+2][py]==0) { a[px][py]=7; a[px][py+1]=7; a[px+1][py]=7; a[px+2][py+1]=7; a[px+2][py]=7; in[7]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px+1][py]=0; a[px+2][py+1]=0; a[px+2][py]=0; in[7]=false; } if(a[px][py+1]==0&&a[px+1][py+1]==0&&a[px+2][py+1]==0&&a[px+2][py]==0) { a[px][py]=7; a[px][py+1]=7; a[px+1][py+1]=7; a[px+2][py+1]=7; a[px+2][py]=7; in[7]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px+1][py+1]=0; a[px+2][py+1]=0; a[px+2][py]=0; in[7]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px+1][py+2]==0&&a[px+1][py]==0) { a[px][py]=7; a[px][py+1]=7; a[px][py+2]=7; a[px+1][py+2]=7; a[px+1][py]=7; in[7]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px+1][py+2]=0; a[px+1][py]=0; in[7]=false; } if(a[px+1][py]==0&&a[px+1][py+1]==0&&a[px+1][py+2]==0&&a[px][py+2]==0) { a[px][py]=7; a[px+1][py]=7; a[px+1][py+1]=7; a[px+1][py+2]=7; a[px][py+2]=7; in[7]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+1][py+1]=0; a[px+1][py+2]=0; a[px][py+2]=0; in[7]=false; } } //H:8cases if(!in[8]){ if(a[px+1][py]==0&&a[px+1][py+1]==0&&a[px+2][py]==0&&a[px+2][py+1]==0) { a[px][py]=8; a[px+1][py]=8; a[px+1][py+1]=8; a[px+2][py]=8; a[px+2][py+1]=8; in[8]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+1][py+1]=0; a[px+2][py]=0; a[px+2][py+1]=0; in[8]=false; } if(a[px-1][py+1]==0&&a[px][py+1]==0&&a[px+1][py+1]==0&&a[px+1][py]==0) { a[px][py]=8; a[px-1][py+1]=8; a[px][py+1]=8; a[px+1][py+1]=8; a[px+1][py]=8; in[8]=true; dfs(); a[px][py]=0; a[px-1][py+1]=0; a[px][py+1]=0; a[px+1][py+1]=0; a[px+1][py]=0; in[8]=false; } if(a[px][py+1]==0&&a[px+1][py]==0&&a[px+1][py+1]==0&&a[px+2][py+1]==0) { a[px][py]=8; a[px+1][py]=8; a[px][py+1]=8; a[px+1][py+1]=8; a[px+2][py+1]=8; in[8]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px][py+1]=0; a[px+1][py+1]=0; a[px+2][py+1]=0; in[8]=false; } if(a[px+1][py]==0&&a[px+2][py]==0&&a[px][py+1]==0&&a[px+1][py+1]==0){ a[px][py]=8; a[px+1][py]=8; a[px+2][py]=8; a[px][py+1]=8; a[px+1][py+1]=8; in[8]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+2][py]=0; a[px][py+1]=0; a[px+1][py+1]=0; in[8]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px+1][py+1]==0&&a[px+1][py+2]==0) { a[px][py]=8; a[px][py+1]=8; a[px][py+2]=8; a[px+1][py+1]=8; a[px+1][py+2]=8; in[8]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px+1][py+1]=0; a[px+1][py+2]=0; in[8]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px-1][py+1]==0&&a[px-1][py+2]==0){ a[px][py]=8; a[px][py+1]=8; a[px][py+2]=8; a[px-1][py+1]=8; a[px-1][py+2]=8; in[8]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px-1][py+1]=0; a[px-1][py+2]=0; in[8]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px+1][py]==0&&a[px+1][py+1]==0) { a[px][py]=8; a[px][py+1]=8; a[px][py+2]=8; a[px+1][py]=8; a[px+1][py+1]=8; in[8]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px+1][py]=0; a[px+1][py+1]=0; in[8]=false; } if(a[px][py+1]==0&&a[px+1][py+2]==0&&a[px+1][py+1]==0&&a[px+1][py]==0){ a[px][py]=8; a[px][py+1]=8; a[px+1][py+2]=8; a[px+1][py+1]=8; a[px+1][py]=8; in[8]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px+1][py+2]=0; a[px+1][py+1]=0; a[px+1][py]=0; in[8]=false; } } //I:8cases if(!in[9]){ if(a[px+1][py]==0&&a[px+2][py]==0&&a[px+2][py+1]==0&&a[px+3][py+1]==0){ a[px][py]=9; a[px+1][py]=9; a[px+2][py]=9; a[px+2][py+1]=9; a[px+3][py+1]=9; in[9]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+2][py]=0; a[px+2][py+1]=0; a[px+3][py+1]=0; in[9]=false; } if(a[px-2][py+1]==0&&a[px-1][py+1]==0&&a[px][py+1]==0&&a[px+1][py]==0) { a[px][py]=9; a[px-2][py+1]=9; a[px-1][py+1]=9; a[px][py+1]=9; a[px+1][py]=9; in[9]=true; dfs(); a[px][py]=0; a[px-2][py+1]=0; a[px-1][py+1]=0; a[px][py+1]=0; a[px+1][py]=0; in[9]=false; } if(a[px+1][py]==0&&a[px+1][py+1]==0&&a[px+2][py+1]==0&&a[px+3][py+1]==0){ a[px][py]=9; a[px+1][py]=9; a[px+1][py+1]=9; a[px+2][py+1]=9; a[px+3][py+1]=9; in[9]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+1][py+1]=0; a[px+2][py+1]=0; a[px+3][py+1]=0; in[9]=false; } if(a[px][py+1]==0&&a[px-1][py+1]==0&&a[px-2][py+1]==0&&a[px+1][py]==0){ a[px][py]=9; a[px][py+1]=9; a[px-1][py+1]=9; a[px-2][py+1]=9; a[px+1][py]=9; in[9]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px-1][py+1]=0; a[px-2][py+1]=0; a[px+1][py]=0; in[9]=false; } if(a[px][py+1]==0&&a[px+1][py+1]==0&&a[px+1][py+3]==0&&a[px+1][py+2]==0){ a[px][py]=9; a[px][py+1]=9; a[px+1][py+1]=9; a[px+1][py+3]=9; a[px+1][py+2]=9; in[9]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px+1][py+1]=0; a[px+1][py+3]=0; a[px+1][py+2]=0; in[9]=false; } if(a[px][py+1]==0&&a[px-1][py+1]==0&&a[px-1][py+3]==0&&a[px-1][py+2]==0){ a[px][py]=9; a[px][py+1]=9; a[px-1][py+1]=9; a[px-1][py+3]=9; a[px-1][py+2]=9; in[9]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px-1][py+1]=0; a[px-1][py+3]=0; a[px-1][py+2]=0; in[9]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px+1][py+2]==0&&a[px+1][py+3]==0) { a[px][py]=9; a[px][py+1]=9; a[px][py+2]=9; a[px+1][py+2]=9; a[px+1][py+3]=9; in[9]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px+1][py+2]=0; a[px+1][py+3]=0; in[9]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px-1][py+2]==0&&a[px-1][py+3]==0) { a[px][py]=9; a[px][py+1]=9; a[px][py+2]=9; a[px-1][py+2]=9; a[px-1][py+3]=9; in[9]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px-1][py+2]=0; a[px-1][py+3]=0; in[9]=false; } } //J:1case if(!in[10]){ if(a[px][py+1]==0&&a[px][py+2]==0&&a[px-1][py+1]==0&&a[px+1][py+1]==0) { a[px][py]=10; a[px][py+1]=10; a[px][py+2]=10; a[px-1][py+1]=10; a[px+1][py+1]=10; in[10]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px-1][py+1]=0; a[px+1][py+1]=0; in[10]=false; } } //K:4cases if(!in[11]){ if(a[px][py+1]==0&&a[px+1][py+1]==0&&a[px+1][py+2]==0&&a[px+2][py+2]==0) { a[px][py]=11; a[px][py+1]=11; a[px+1][py+1]=11; a[px+1][py+2]=11; a[px+2][py+2]=11; in[11]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px+1][py+1]=0; a[px+1][py+2]=0; a[px+2][py+2]=0; in[11]=false; } if(a[px][py+1]==0&&a[px-1][py+1]==0&&a[px-1][py+2]==0&&a[px-2][py+2]==0) { a[px][py]=11; a[px][py+1]=11; a[px-1][py+1]=11; a[px-1][py+2]=11; a[px-2][py+2]=11; in[11]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px-1][py+1]=0; a[px-1][py+2]=0; a[px-2][py+2]=0; in[11]=false; } if(a[px+1][py]==0&&a[px+1][py+1]==0&&a[px+2][py+1]==0&&a[px+2][py+2]==0){ a[px][py]=11; a[px+1][py]=11; a[px+1][py+1]=11; a[px+2][py+1]=11; a[px+2][py+2]=11; in[11]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+1][py+1]=0; a[px+2][py+1]=0; a[px+2][py+2]=0; in[11]=false; } if(a[px+1][py]==0&&a[px][py+1]==0&&a[px-1][py+1]==0&&a[px-1][py+2]==0){ a[px][py]=11; a[px][py+1]=11; a[px+1][py]=11; a[px-1][py+1]=11; a[px-1][py+2]=11; in[11]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px+1][py]=0; a[px-1][py+1]=0; a[px-1][py+2]=0; in[11]=false; } } //L:8cases if(!in[12]){ if(a[px][py+1]==0&&a[px+1][py]==0&&a[px+2][py]==0&&a[px+3][py]==0) { a[px][py]=12; a[px][py+1]=12; a[px+1][py]=12; a[px+2][py]=12; a[px+3][py]=12; in[12]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px+1][py]=0; a[px+2][py]=0; a[px+3][py]=0; in[12]=false; } if(a[px+3][py+1]==0&&a[px+1][py]==0&&a[px+2][py]==0&&a[px+3][py]==0){ a[px][py]=12; a[px+3][py+1]=12; a[px+1][py]=12; a[px+2][py]=12; a[px+3][py]=12; in[12]=true; dfs(); a[px][py]=0; a[px+3][py+1]=0; a[px+1][py]=0; a[px+2][py]=0; a[px+3][py]=0; in[12]=false; } if(a[px][py+1]==0&&a[px+1][py+1]==0&&a[px+2][py+1]==0&&a[px+3][py+1]==0){ a[px][py]=12; a[px][py+1]=12; a[px+1][py+1]=12; a[px+2][py+1]=12; a[px+3][py+1]=12; in[12]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px+1][py+1]=0; a[px+2][py+1]=0; a[px+3][py+1]=0; in[12]=false; } if(a[px][py+1]==0&&a[px-1][py+1]==0&&a[px-2][py+1]==0&&a[px-3][py+1]==0){ a[px][py]=12; a[px][py+1]=12; a[px-1][py+1]=12; a[px-2][py+1]=12; a[px-3][py+1]=12; in[12]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px-1][py+1]=0; a[px-2][py+1]=0; a[px-3][py+1]=0; in[12]=false; } if(a[px+1][py]==0&&a[px+1][py+1]==0&&a[px+1][py+2]==0&&a[px+1][py+3]==0) { a[px][py]=12; a[px+1][py]=12; a[px+1][py+1]=12; a[px+1][py+2]=12; a[px+1][py+3]=12; in[12]=true; dfs(); a[px][py]=0; a[px+1][py]=0; a[px+1][py+1]=0; a[px+1][py+2]=0; a[px+1][py+3]=0; in[12]=false; } if(a[px+1][py]==0&&a[px][py+1]==0&&a[px][py+2]==0&&a[px][py+3]==0){ a[px][py]=12; a[px][py+1]=12; a[px+1][py]=12; a[px][py+2]=12; a[px][py+3]=12; in[12]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px+1][py]=0; a[px][py+2]=0; a[px][py+3]=0; in[12]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px][py+3]==0&&a[px+1][py+3]==0) { a[px][py]=12; a[px][py+1]=12; a[px][py+2]=12; a[px][py+3]=12; a[px+1][py+3]=12; in[12]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px][py+3]=0; a[px+1][py+3]=0; in[12]=false; } if(a[px][py+1]==0&&a[px][py+2]==0&&a[px][py+3]==0&&a[px-1][py+3]==0) { a[px][py]=12; a[px][py+1]=12; a[px][py+2]=12; a[px][py+3]=12; a[px-1][py+3]=12; in[12]=true; dfs(); a[px][py]=0; a[px][py+1]=0; a[px][py+2]=0; a[px][py+3]=0; a[px-1][py+3]=0; in[12]=false; } } } void openfile(){ freopen("game.in","r",stdin); freopen("game.out","w",stdout); } int main(){ //openfile(); init(); dfs(); printf("No solution"); return 0; } ~~~ 恭喜你彻底农烂