1 条题解
-
0
自动搬运
来自洛谷,原作者为

Fellyhosn
**搬运于
2025-08-24 21:57:39,当前版本为作者最后更新于2018-10-17 21:56:12,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题解 P4205 [NOI2005]智慧珠游戏

先给大家简述一下题意:(不会玩智慧珠游戏的自己去百度一下)
写一个程序解决骨灰级智慧珠问题(只给出~个块,你需要自己填完剩下的~块)
数据保证至多有一组解。
假装分析一下:这是所有块的形状

由于图形可以旋转、翻折、
跳跃,所以要先把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; }恭喜你彻底农烂
- 1
信息
- ID
- 3159
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者