[2020藍橋杯B組決賽] E-玩具蛇

本題沒有題目,但來看題解的人都已知道題目意思了叭。ios

題解spa

  枚舉每一點 $(i, j)$ ,總共 $16$ 種可能性,而後 $dfs$ 判斷層數 $u$,若是 $u=16$ ,說明全部點都走過了,方案數加一便可。code

#include <iostream>
#include <cstring>
using namespace std;

const int N = 20;
int n = 4, ans;
int maze[N][N];
bool st[N][N];
int row[4] = {-1, 0, 1, 0}, col[4] = {0, 1, 0, -1};

int check(int x, int y)
{
    return x >= 0 && x < n && y >= 0 && y < n;
}

void dfs(int x, int y, int u)
{ 
    if (u == 15) {
        ++ans;
        return ;
    }
    for (int i = 0; i < 4; ++i) {
        int xx = x + row[i];
        int yy = y + col[i];
        if (check(xx, yy) && !st[xx][yy]) {
            st[xx][yy] = true;
            dfs(xx, yy, u + 1);
            st[xx][yy] = false;
        }
    }
}

int main()
{
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            st[i][j] = true;
            dfs(i, j, 0);
            memset(st, false, sizeof(st));
        }
    }
    cout << ans << endl;
    return 0;
}

   但是,我,嗚嗚嗚~~,只判 $(0, 0)$ 這一個點,由於以前作了 2019 的一道相似的真題,就先入爲主了,嚶嚶嚶。blog

相關文章
相關標籤/搜索