题解 P4205 【[NOI2005]智障珠游戏 】
题解 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;
}
恭喜你彻底农烂