zoukankan      html  css  js  c++  java
  • 洛谷 P4205 [NOI2005]智慧珠游戏 DFS

    题面

    题目链接

    P4205 [NOI2005]智慧珠游戏

    题目描述

    智慧珠游戏拼盘由一个三角形盘件和 12 个形态各异的零件组成。拼盘的盘 件如图1所示

    图1

    图2

    图3

    对于由珠子构成的零件,可以放到盘件的任一位置,条件是能有地方放,且尺寸合适,所有的零件都允许旋转(0º、90º、180º、270º)和翻转(水平、竖直)。

    现给出一个盘件的初始布局,求一种可行的智慧珠摆放方案,使所有的零件都能放进盘件中。

    输入输出格式

    输入格式

    文件中包含初始的盘件描述,一共有 10 行,第 $ i $ 行有 $ i $ 个字符。如果第 $ i $ 行 的第 $ j $ 个字符是字母 $ ”A” $ 至 $ ”L” $ 中的一个,则表示第 $ i $ 行第 $ j $ 列的格子上已经放了 零件,零件的编号为对应的字母。如果第 $ i $ 行的第 $ j $ 个字符是 $ ”.” $ ,则表示第 $ i $ 行 第 $ j $ 列的格子上没有放零件。 输入保证预放的零件已摆放在盘件中。

    输出格式

    如果能找到解,向输出文件打印 10 行,为放完全部 12 个零件后的布局。其中,第 $ i $ 行应包含 $ i $ 个字符,第 $ i $ 行的第 $ j $ 个字符表示第 $ i $ 行第 $ j $ 列的格子上放的是哪个零件。 如果无解,输出单独的一个字符串‘No solution’(不要引号,请注意大小写)。 所有的数据保证最多只有一组解

    输入输出样例

    输入样例

    .
    ..
    ...
    ....
    .....
    .....C
    ...CCC.
    EEEHH...
    E.HHH....
    E.........
    

    输出样例

    B
    BK
    BKK
    BJKK
    JJJDD
    GJGDDC
    GGGCCCI
    EEEHHIIA
    ELHHHIAAF
    ELLLLIFFFF
    

    说明

    1000ms,128MB

    思路

    请手打暴搜(听说可以舞蹈链,但我不会)

    另外,可以先判连通块大小优化一下,如果有连通块大小小于等于2,那肯定无解

    AC代码

    #include<bits/stdc++.h>
    #define ok =='.'
    #define tr =ch
    #define cl ='.'
    using namespace std;
    
    char MAP[20][20];
    bool vis[15],VIS[20][20];
    int num[20][20];
    
    int DFS(int x,int y)
    {
        if(VIS[x][y]) return 0;
        VIS[x][y]=1;
        if(MAP[x][y]!='.') return 0;
        return 1+DFS(x+1,y)+DFS(x-1,y)+DFS(x,y+1)+DFS(x,y-1);
    }
    
    void dfs(int x,int y)
    {
        if(x==11)
        {
            for(int i=1;i<=10;i++)
            {
                for(int j=1;j<=i;j++)
                cout<<MAP[i][j];
                cout<<endl;
            }
            exit(0);
        }
        if(y==x+1) {dfs(x+1,1);return;}
        if(!(MAP[x][y]ok)) {dfs(x,y+1);return;}
    
        char ch;
    
        ch='J';
        if(!vis[10])
        {
            vis[10]=true;MAP[x][y]tr;
            if(MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+1][y-1]ok && MAP[x+1][y+1]ok)
            {
                MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+1][y-1]tr,MAP[x+1][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+1][y-1]cl,MAP[x+1][y+1]cl;
            }
            vis[10]=false;MAP[x][y]cl;
        }
    
        ch='D';
        if(!vis[4])
        {
            vis[4]=true;MAP[x][y]tr;
            if(MAP[x+1][y]ok && MAP[x][y+1]ok && MAP[x+1][y+1]ok)
            {
                MAP[x+1][y]tr,MAP[x][y+1]tr,MAP[x+1][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x][y+1]cl,MAP[x+1][y+1]cl;
            }
            vis[4]=false;MAP[x][y]cl;
        }
    
        ch='B';
        if(!vis[2])
        {
            vis[2]=true;MAP[x][y]tr;
            if(MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+3][y]ok)
            {
                MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+3][y]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+3][y]cl;
            }
            if(MAP[x][y+1]ok && MAP[x][y+2]ok && MAP[x][y+3]ok)
            {
                MAP[x][y+1]tr,MAP[x][y+2]tr,MAP[x][y+3]tr;
                dfs(x,y+1);
                MAP[x][y+1]cl,MAP[x][y+2]cl,MAP[x][y+3]cl;
            }
            vis[2]=false;MAP[x][y]cl;
        }
    
        ch='K';
        if(!vis[11])
        {
            vis[11]=true;MAP[x][y]tr;
            if(MAP[x+1][y]ok && MAP[x+1][y+1]ok && MAP[x+2][y+1]ok && MAP[x+2][y+2]ok)
            {
                MAP[x+1][y]tr,MAP[x+1][y+1]tr,MAP[x+2][y+1]tr,MAP[x+2][y+2]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+1][y+1]cl,MAP[x+2][y+1]cl,MAP[x+2][y+2]cl;
            }
            if(MAP[x][y+1]ok && MAP[x+1][y+1]ok && MAP[x+1][y+2]ok && MAP[x+2][y+2]ok)
            {
                MAP[x][y+1]tr,MAP[x+1][y+1]tr,MAP[x+1][y+2]tr,MAP[x+2][y+2]tr;
                dfs(x,y+1);
                MAP[x][y+1]cl,MAP[x+1][y+1]cl,MAP[x+1][y+2]cl,MAP[x+2][y+2]cl;
            }
            if(y>2 && MAP[x+1][y]ok && MAP[x+1][y-1]ok && MAP[x+2][y-1]ok && MAP[x+2][y-2]ok)
            {
                MAP[x+1][y]tr,MAP[x+1][y-1]tr,MAP[x+2][y-1]tr,MAP[x+2][y-2]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+1][y-1]cl,MAP[x+2][y-1]cl,MAP[x+2][y-2]cl;
            }
            if(MAP[x+1][y]ok && MAP[x+1][y-1]ok && MAP[x+2][y-1]ok && MAP[x+1][y]ok)
            {
                MAP[x+1][y]tr,MAP[x+1][y-1]tr,MAP[x+2][y-1]tr,MAP[x+1][y]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+1][y-1]cl,MAP[x+2][y-1]cl,MAP[x+1][y]cl;
            }
            vis[11]=false;MAP[x][y]cl;
        }
    
        ch='G';
        if(!vis[7])
        {
            vis[7]=true;MAP[x][y]tr;
            if(MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x][y+1]ok && MAP[x+2][y+1]ok)
            {
                MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x][y+1]tr,MAP[x+2][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x][y+1]cl,MAP[x+2][y+1]cl;
            }
            if(MAP[x+1][y+1]ok && MAP[x+2][y]ok && MAP[x][y+1]ok && MAP[x+2][y+1]ok)
            {
                MAP[x+1][y+1]tr,MAP[x+2][y]tr,MAP[x][y+1]tr,MAP[x+2][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y+1]cl,MAP[x+2][y]cl,MAP[x][y+1]cl,MAP[x+2][y+1]cl;
            }
            if(MAP[x][y+1]ok && MAP[x][y+2]ok && MAP[x+1][y+2]ok && MAP[x+1][y]ok)
            {
                MAP[x][y+1]tr,MAP[x][y+2]tr,MAP[x+1][y+2]tr,MAP[x+1][y]tr;
                dfs(x,y+1);
                MAP[x][y+1]cl,MAP[x][y+2]cl,MAP[x+1][y+2]cl,MAP[x+1][y]cl;
            }
            if(MAP[x+1][y+1]ok && MAP[x][y+2]ok && MAP[x+1][y+2]ok && MAP[x+1][y]ok)
            {
                MAP[x+1][y+1]tr,MAP[x][y+2]tr,MAP[x+1][y+2]tr,MAP[x+1][y]tr;
                dfs(x,y+1);
                MAP[x+1][y+1]cl,MAP[x][y+2]cl,MAP[x+1][y+2]cl,MAP[x+1][y]cl;
            }
            vis[7]=false;MAP[x][y]cl;
        }
    
        ch='E';
        if(!vis[5])
        {
            vis[5]=true;MAP[x][y]tr;
            if(MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x][y+1]ok && MAP[x][y+2]ok)
            {
                MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x][y+1]tr,MAP[x][y+2]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x][y+1]cl,MAP[x][y+2]cl;
            }
            if(MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+2][y+1]ok && MAP[x+2][y+2]ok)
            {
                MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+2][y+1]tr,MAP[x+2][y+2]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+2][y+1]cl,MAP[x+2][y+2]cl;
            }
            if(y>2 && MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+2][y-1]ok && MAP[x+2][y-2]ok)
            {
                MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+2][y-1]tr,MAP[x+2][y-2]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+2][y-1]cl,MAP[x+2][y-2]cl;
            }
            if(MAP[x+2][y+1]ok && MAP[x+2][y+2]ok && MAP[x+1][y]ok && MAP[x+2][y]ok)
            {
                MAP[x+2][y+1]tr,MAP[x+2][y+2]tr,MAP[x+1][y]tr,MAP[x+2][y]tr;
                dfs(x,y+1);
                MAP[x+2][y+1]cl,MAP[x+2][y+2]cl,MAP[x+1][y]cl,MAP[x+2][y]cl;
            }
            vis[5]=false;MAP[x][y]cl;
        }
    
        ch='A';
        if(!vis[1])
        {
            vis[1]=true;MAP[x][y]tr;
            if(MAP[x+1][y]ok && MAP[x][y+1]ok)
            {
                MAP[x+1][y]tr,MAP[x][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x][y+1]cl;
            }
            if(MAP[x+1][y+1]ok && MAP[x][y+1]ok)
            {
                MAP[x+1][y+1]tr,MAP[x][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y+1]cl,MAP[x][y+1]cl;
            }
            if(MAP[x+1][y]ok && MAP[x+1][y+1]ok)
            {
                MAP[x+1][y]tr,MAP[x+1][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+1][y+1]cl;
            }
            if(MAP[x+1][y]ok && MAP[x+1][y-1]ok)
            {
                MAP[x+1][y]tr,MAP[x+1][y-1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+1][y-1]cl;
            }
            vis[1]=false;MAP[x][y]cl;
        }
    
        ch='I';
        if(!vis[9])
        {
            vis[9]=true;MAP[x][y]tr;
            if(MAP[x+1][y+1]ok && MAP[x][y+1]ok && MAP[x+1][y+2]ok && MAP[x+1][y+3]ok)
            {
                MAP[x+1][y+1]tr,MAP[x][y+1]tr,MAP[x+1][y+2]tr,MAP[x+1][y+3]tr;
                dfs(x,y+1);
                MAP[x+1][y+1]cl,MAP[x][y+1]cl,MAP[x+1][y+2]cl,MAP[x+1][y+3]cl;
            }
            if(MAP[x+1][y]ok && MAP[x+1][y-1]ok && MAP[x][y+2]ok && MAP[x][y+1]ok)
            {
                MAP[x+1][y]tr,MAP[x+1][y-1]tr,MAP[x][y+2]tr,MAP[x][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+1][y-1]cl,MAP[x][y+2]cl,MAP[x][y+1]cl;
            }
            if(MAP[x+1][y+2]ok && MAP[x][y+1]ok && MAP[x][y+2]ok && MAP[x+1][y+3]ok)
            {
                MAP[x+1][y+2]tr,MAP[x][y+1]tr,MAP[x][y+2]tr,MAP[x+1][y+3]tr;
                dfs(x,y+1);
                MAP[x+1][y+2]cl,MAP[x][y+1]cl,MAP[x][y+2]cl,MAP[x+1][y+3]cl;
            }
            if(y>2 && MAP[x+1][y]ok && MAP[x][y+1]ok && MAP[x+1][y-2]ok && MAP[x+1][y-1]ok)
            {
                MAP[x+1][y]tr,MAP[x][y+1]tr,MAP[x+1][y-2]tr,MAP[x+1][y-1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x][y+1]cl,MAP[x+1][y-2]cl,MAP[x+1][y-1]cl;
            }
            if(MAP[x+2][y]ok && MAP[x+1][y]ok && MAP[x+2][y+1]ok && MAP[x+3][y+1]ok)
            {
                MAP[x+2][y]tr,MAP[x+1][y]tr,MAP[x+2][y+1]tr,MAP[x+3][y+1]tr;
                dfs(x,y+1);
                MAP[x+2][y]cl,MAP[x+1][y]cl,MAP[x+2][y+1]cl,MAP[x+3][y+1]cl;
            }
            if(MAP[x+1][y+1]ok && MAP[x+1][y]ok && MAP[x+2][y+1]ok && MAP[x+3][y+1]ok)
            {
                MAP[x+1][y+1]tr,MAP[x+1][y]tr,MAP[x+2][y+1]tr,MAP[x+3][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y+1]cl,MAP[x+1][y]cl,MAP[x+2][y+1]cl,MAP[x+3][y+1]cl;
            }
            if(MAP[x+2][y]ok && MAP[x+1][y]ok && MAP[x+2][y-1]ok && MAP[x+3][y-1]ok)
            {
                MAP[x+2][y]tr,MAP[x+1][y]tr,MAP[x+2][y-1]tr,MAP[x+3][y-1]tr;
                dfs(x,y+1);
                MAP[x+2][y]cl,MAP[x+1][y]cl,MAP[x+2][y-1]cl,MAP[x+3][y-1]cl;
            }
            if(MAP[x+1][y-1]ok && MAP[x+1][y]ok && MAP[x+2][y-1]ok && MAP[x+3][y-1]ok)
            {
                MAP[x+1][y-1]tr,MAP[x+1][y]tr,MAP[x+2][y-1]tr,MAP[x+3][y-1]tr;
                dfs(x,y+1);
                MAP[x+1][y-1]cl,MAP[x+1][y]cl,MAP[x+2][y-1]cl,MAP[x+3][y-1]cl;
            }
            vis[9]=false;MAP[x][y]cl;
        }
    
        ch='H';
        if(!vis[8])
        {
            vis[8]=true;MAP[x][y]tr;
            if(MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+1][y+1]ok && MAP[x+2][y+1]ok)
            {
                MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+1][y+1]tr,MAP[x+2][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+1][y+1]cl,MAP[x+2][y+1]cl;
            }
            if(MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+1][y-1]ok && MAP[x+2][y-1]ok)
            {
                MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+1][y-1]tr,MAP[x+2][y-1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+1][y-1]cl,MAP[x+2][y-1]cl;
            }
            if(MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+1][y+1]ok && MAP[x][y+1]ok)
            {
                MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+1][y+1]tr,MAP[x][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+1][y+1]cl,MAP[x][y+1]cl;
            }
            if(MAP[x+1][y]ok && MAP[x+2][y+1]ok && MAP[x+1][y+1]ok && MAP[x][y+1]ok)
            {
                MAP[x+1][y]tr,MAP[x+2][y+1]tr,MAP[x+1][y+1]tr,MAP[x][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+2][y+1]cl,MAP[x+1][y+1]cl,MAP[x][y+1]cl;
            }
            if(MAP[x+1][y]ok && MAP[x][y+1]ok && MAP[x+1][y+1]ok && MAP[x][y+2]ok)
            {
                MAP[x+1][y]tr,MAP[x][y+1]tr,MAP[x+1][y+1]tr,MAP[x][y+2]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x][y+1]cl,MAP[x+1][y+1]cl,MAP[x][y+2]cl;
            }
            if(MAP[x+1][y]ok && MAP[x][y+1]ok && MAP[x+1][y+1]ok && MAP[x+1][y+2]ok)
            {
                MAP[x+1][y]tr,MAP[x][y+1]tr,MAP[x+1][y+1]tr,MAP[x+1][y+2]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x][y+1]cl,MAP[x+1][y+1]cl,MAP[x+1][y+2]cl;
            }
            if(MAP[x][y+2]ok && MAP[x][y+1]ok && MAP[x+1][y+1]ok && MAP[x+1][y+2]ok)
            {
                MAP[x][y+2]tr,MAP[x][y+1]tr,MAP[x+1][y+1]tr,MAP[x+1][y+2]tr;
                dfs(x,y+1);
                MAP[x][y+2]cl,MAP[x][y+1]cl,MAP[x+1][y+1]cl,MAP[x+1][y+2]cl;
            }
            if(MAP[x+1][y]ok && MAP[x][y+1]ok && MAP[x+1][y+1]ok && MAP[x+1][y-1]ok)
            {
                MAP[x+1][y]tr,MAP[x][y+1]tr,MAP[x+1][y+1]tr,MAP[x+1][y-1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x][y+1]cl,MAP[x+1][y+1]cl,MAP[x+1][y-1]cl;
            }
            vis[8]=false;MAP[x][y]cl;
        }
    
        ch='F';
        if(!vis[6])
        {
            vis[6]=true;MAP[x][y]tr;
            if(MAP[x+1][y+1]ok && MAP[x][y+1]ok && MAP[x][y+2]ok && MAP[x][y+3]ok)
            {
                MAP[x+1][y+1]tr,MAP[x][y+1]tr,MAP[x][y+2]tr,MAP[x][y+3]tr;
                dfs(x,y+1);
                MAP[x+1][y+1]cl,MAP[x][y+1]cl,MAP[x][y+2]cl,MAP[x][y+3]cl;
            }
            if(MAP[x+1][y+2]ok && MAP[x][y+1]ok && MAP[x][y+2]ok && MAP[x][y+3]ok)
            {
                MAP[x+1][y+2]tr,MAP[x][y+1]tr,MAP[x][y+2]tr,MAP[x][y+3]tr;
                dfs(x,y+1);
                MAP[x+1][y+2]cl,MAP[x][y+1]cl,MAP[x][y+2]cl,MAP[x][y+3]cl;
            }
            if(MAP[x+1][y+1]ok && MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+3][y]ok)
            {
                MAP[x+1][y+1]tr,MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+3][y]tr;
                dfs(x,y+1);
                MAP[x+1][y+1]cl,MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+3][y]cl;
            }
            if(MAP[x+2][y+1]ok && MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+3][y]ok)
            {
                MAP[x+2][y+1]tr,MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+3][y]tr;
                dfs(x,y+1);
                MAP[x+2][y+1]cl,MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+3][y]cl;
            }
            if(MAP[x+1][y-1]ok && MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+3][y]ok)
            {
                MAP[x+1][y-1]tr,MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+3][y]tr;
                dfs(x,y+1);
                MAP[x+1][y-1]cl,MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+3][y]cl;
            }
            if(MAP[x+2][y-1]ok && MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+3][y]ok)
            {
                MAP[x+2][y-1]tr,MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+3][y]tr;
                dfs(x,y+1);
                MAP[x+2][y-1]cl,MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+3][y]cl;
            }
            if(MAP[x+1][y]ok && MAP[x+1][y+1]ok && MAP[x+1][y+2]ok && MAP[x+1][y-1]ok)
            {
                MAP[x+1][y]tr,MAP[x+1][y+1]tr,MAP[x+1][y+2]tr,MAP[x+1][y-1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+1][y+1]cl,MAP[x+1][y+2]cl,MAP[x+1][y-1]cl;
            }
            if(y>2 && MAP[x+1][y]ok && MAP[x+1][y+1]ok && MAP[x+1][y-2]ok && MAP[x+1][y-1]ok)
            {
                MAP[x+1][y]tr,MAP[x+1][y+1]tr,MAP[x+1][y-2]tr,MAP[x+1][y-1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+1][y+1]cl,MAP[x+1][y-2]cl,MAP[x+1][y-1]cl;
            }
            vis[6]=false;MAP[x][y]cl;
        }
    
        ch='L';
        if(!vis[12])
        {
            vis[12]=true;MAP[x][y]tr;
            if(MAP[x+1][y]ok && MAP[x][y+1]ok && MAP[x][y+2]ok && MAP[x][y+3]ok)
            {
                MAP[x+1][y]tr,MAP[x][y+1]tr,MAP[x][y+2]tr,MAP[x][y+3]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x][y+1]cl,MAP[x][y+2]cl,MAP[x][y+3]cl;
            }
            if(MAP[x+1][y]ok && MAP[x+1][y+1]ok && MAP[x+1][y+2]ok && MAP[x+1][y+3]ok)
            {
                MAP[x+1][y]tr,MAP[x+1][y+1]tr,MAP[x+1][y+2]tr,MAP[x+1][y+3]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+1][y+1]cl,MAP[x+1][y+2]cl,MAP[x+1][y+3]cl;
            }
            if(y>3 && MAP[x+1][y]ok && MAP[x+1][y-1]ok && MAP[x+1][y-2]ok && MAP[x+1][y-3]ok)
            {
                MAP[x+1][y]tr,MAP[x+1][y-1]tr,MAP[x+1][y-2]tr,MAP[x+1][y-3]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+1][y-1]cl,MAP[x+1][y-2]cl,MAP[x+1][y-3]cl;
            }
            if(MAP[x+1][y+3]ok && MAP[x][y+1]ok && MAP[x][y+2]ok && MAP[x][y+3]ok)
            {
                MAP[x+1][y+3]tr,MAP[x][y+1]tr,MAP[x][y+2]tr,MAP[x][y+3]tr;
                dfs(x,y+1);
                MAP[x+1][y+3]cl,MAP[x][y+1]cl,MAP[x][y+2]cl,MAP[x][y+3]cl;
            }
            if(MAP[x][y+1]ok && MAP[x+1][y+1]ok && MAP[x+2][y+1]ok && MAP[x+3][y+1]ok)
            {
                MAP[x][y+1]tr,MAP[x+1][y+1]tr,MAP[x+2][y+1]tr,MAP[x+3][y+1]tr;
                dfs(x,y+1);
                MAP[x][y+1]cl,MAP[x+1][y+1]cl,MAP[x+2][y+1]cl,MAP[x+3][y+1]cl;
            }
            if(MAP[x][y+1]ok && MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+3][y]ok)
            {
                MAP[x][y+1]tr,MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+3][y]tr;
                dfs(x,y+1);
                MAP[x][y+1]cl,MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+3][y]cl;
            }
            if(MAP[x+3][y-1]ok && MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+3][y]ok)
            {
                MAP[x+3][y-1]tr,MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+3][y]tr;
                dfs(x,y+1);
                MAP[x+3][y-1]cl,MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+3][y]cl;
            }
            if(MAP[x+3][y+1]ok && MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+3][y]ok)
            {
                MAP[x+3][y+1]tr,MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+3][y]tr;
                dfs(x,y+1);
                MAP[x+3][y+1]cl,MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+3][y]cl;
            }
            vis[12]=false;MAP[x][y]cl;
        }
    
        ch='C';
        if(!vis[3])
        {
            vis[3]=true;MAP[x][y]tr;
            if(MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x][y+1]ok)
            {
                MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x][y+1]cl;
            }
            if(MAP[x+1][y]ok && MAP[x+1][y+1]ok && MAP[x+1][y+2]ok)
            {
                MAP[x+1][y]tr,MAP[x+1][y+1]tr,MAP[x+1][y+2]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+1][y+1]cl,MAP[x+1][y+2]cl;
            }
            if(y>2 && MAP[x+1][y]ok && MAP[x+1][y-1]ok && MAP[x+1][y-2]ok)
            {
                MAP[x+1][y]tr,MAP[x+1][y-1]tr,MAP[x+1][y-2]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+1][y-1]cl,MAP[x+1][y-2]cl;
            }
            if(MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+2][y+1]ok)
            {
                MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+2][y+1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+2][y+1]cl;
            }
            if(MAP[x+1][y]ok && MAP[x][y+1]ok && MAP[x][y+2]ok)
            {
                MAP[x+1][y]tr,MAP[x][y+1]tr,MAP[x][y+2]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x][y+1]cl,MAP[x][y+2]cl;
            }
            if(MAP[x+1][y]ok && MAP[x+2][y]ok && MAP[x+2][y-1]ok)
            {
                MAP[x+1][y]tr,MAP[x+2][y]tr,MAP[x+2][y-1]tr;
                dfs(x,y+1);
                MAP[x+1][y]cl,MAP[x+2][y]cl,MAP[x+2][y-1]cl;
            }
            if(MAP[x][y+1]ok && MAP[x][y+2]ok && MAP[x+1][y+2]ok)
            {
                MAP[x][y+1]tr,MAP[x][y+2]tr,MAP[x+1][y+2]tr;
                dfs(x,y+1);
                MAP[x][y+1]cl,MAP[x][y+2]cl,MAP[x+1][y+2]cl;
            }
            if(MAP[x][y+1]ok && MAP[x+1][y+1]ok && MAP[x+2][y+1]ok)
            {
                MAP[x][y+1]tr,MAP[x+1][y+1]tr,MAP[x+2][y+1]tr;
                dfs(x,y+1);
                MAP[x][y+1]cl,MAP[x+1][y+1]cl,MAP[x+2][y+1]cl;
            }
            vis[3]=false;MAP[x][y]cl;
        }
    
    }
    
    int main()
    {
        for(int i=1;i<=10;i++)
            for(int j=1;j<=i;j++)
            {
                cin>>MAP[i][j];
                if(MAP[i][j]>='A' && MAP[i][j]<='L') vis[MAP[i][j]-'A'+1]=true;
            }
        for(int i=1;i<=10;i++)
            for(int j=1;j<=i;j++)
            {
                int n=DFS(i,j);
                if(n && n<=2) goto lskakioi;
            }
        dfs(1,1);
        lskakioi:
        printf("No solution");
        return 0;
    }
    

    总结

    这是今天考试题。。。下来一看,错了8个地方,时间也浪费了。所以这种长的题,就应该多检查几遍。

    (感觉有写猪国杀的动力了)

  • 相关阅读:
    poj 2049 Let it Bead(polya模板)
    poj 1286 Necklace of Beads (polya(旋转+翻转)+模板)
    poj 2226 Muddy Fields(最小点覆盖+巧妙构图)
    poj 3692 Kindergarten (最大独立集之逆匹配)
    poj 1466 Girls and Boys(二分匹配之最大独立集)
    poj 1486 Sorting Slides(二分图匹配的查找应用)
    poj 2112 Optimal Milking (二分图匹配的多重匹配)
    PHP访问控制
    OO(Object Oriented)
    重载与重写以及重构
  • 原文地址:https://www.cnblogs.com/Mercury04/p/9805048.html
Copyright © 2011-2022 走看看