1 条题解

  • 0
    @ 2025-8-24 21:57:39

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Fellyhosn
    **

    搬运于2025-08-24 21:57:39,当前版本为作者最后更新于2018-10-17 21:56:12,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题解 P4205 [NOI2005]智慧珠游戏

    先给大家简述一下题意:(不会玩智慧珠游戏的自己去百度一下)

    写一个程序解决骨灰级智慧珠问题(只给出11~33个块,你需要自己填完剩下的99~1111块)

    数据保证至多有一组解。

    假装分析一下:这是所有块的形状

    由于图形可以旋转、翻折、跳跃,所以要先把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
    上传者