The Squared Mosquito Coil dfs

传送门
思路:dfs探路即可,注意判断邻界条件,记得多考虑几种情况。
同时不能忽视题目条件。(空白处用’ '补齐)。

#include<algorithm>
#include<map>
#include<cstring>
#include<iostream>
using namespace std;
char a[500][500];
int n, flag = 0;
void dfs(int x, int y, char fx)
{
    if(flag)
    {
        return ;
    }
    //cout << x << " " << y << " " << a[x][y] << endl;
    if(fx == 'r')
    {
        //cout << 1 << endl;///当前方向和下一个方向

        if(a[x][y + 2] == '#' && a[x + 2][y] == '#')
        {
            flag = 1;
            return ;
        }
        if(y + 1 >= n || a[x][y + 2] == '#')
        {
            a[x + 1][y] = '#';
            dfs(x + 1, y, 'd');
        }
        else
        {
            a[x][y + 1] = '#';
            dfs(x, y + 1, fx);
        }
    }
    else if(fx == 'd')
    {
        //cout << 2 << endl;
        if((a[x][y - 2] == '#' || a[x - 1][y - 1] == '#' ) && a[x + 2][y] == '#')
        {
            flag = 1;
            return ;
        }
        if(x + 1 >= n || a[x + 2][y] == '#')
        {
            a[x][y - 1] = '#';
            dfs(x, y - 1, 'l');
        }
        else
        {
            a[x + 1][y] = '#';
            //cout << 1111 << endl;
            dfs(x + 1, y, fx);
        }
    }
    else if(fx == 'l')
    {
        //cout << 3 << endl;
        //a[x][y] = '#';
        if(a[x][y - 2] == '#' && a[x - 2][y] == '#')
        {
            flag = 1;
            return ;
        }
        if(y - 1 < 0 || a[x][y - 2] == '#')
        {
            a[x - 1][y] = '#';
            dfs(x - 1, y, 'u');
        }
        else
        {
            a[x][y - 1] = '#';
            dfs(x, y - 1, fx);
        }
    }
    else if(fx == 'u')
    {
        //cout << 4 << endl;
        //a[x][y] = '#';
        if((a[x][y + 2] == '#' || a[x + 1][y + 1] == '#' ) && a[x - 2][y] == '#')
        {
            flag = 1;
            return ;
        }
        //if(a[x][y - 2] == '#' && )
        if(x - 1 < 0 || a[x - 2][y] == '#')
        {
            a[x][y + 1] = '#';
            dfs(x, y + 1, 'r');
        }
        else
        {
            a[x - 1][y] = '#';
            dfs(x - 1, y, fx);
        }
    }
}
int main()
{
    int T;
    cin >> T;
    while(T--)
    {
        flag = 0;
        memset(a,' ',sizeof a);
        cin >> n;
        a[0][0] = '#';
        if(n == 1)
            cout << "#" << endl;
        else if(n == 2)
        {
            cout << "##" << endl;
            cout << " #" << endl;
        }
        else if(n == 3)
        {
            cout << "###" << endl;
            cout << "  #" << endl;
            cout << "###" << endl;
        }
        else
        {
            dfs(0, 0, 'r');
            for(int i = 0; i < n; i++)
            {
                for(int  j = 0; j < n; j++)
                    cout << a[i][j];
                cout << endl;
            }
        }
    }
    return 0;
}

发布了241 篇原创文章 · 获赞 8 · 访问量 4860

猜你喜欢

转载自blog.csdn.net/weixin_43960370/article/details/103324095
dfs