问题标题: 酷町堂:1051

0
0
已解决
刘乐宸
刘乐宸
新手天翼
新手天翼
#include <iostream>
#include <cstdio>
using namespace std;
int n;
int mp[505][505];
int ans=0;
bool vis[505][505];
int dir[9][2]={{0},{0,-1},{-1,0},{0,1},{1,0},{1,-1},{-1,1},{1,1},{-1,-1}};
void dfs(int x, int y)
{
    if(x==n&&y==n)
    {
        ans++;
        return;
    }
    for(int i=1; i<=8; i++)
    {
        int nx=x+dir[i][0], ny=y+dir[i][1];
        if((nx>=1&&nx<=n)&&(ny>=1&&ny<=n)&&(mp[nx][ny]==0)&&(vis[nx][ny]==false))
        {
            vis[nx][ny]=true;
            dfs(nx, ny);
            vis[nx][ny]=false;
        }
    }
}
int main()
{
    cin >> n;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
        {
            cin >> mp[i][j];
        }
    }
    vis[0][0] = true;
    dfs(0, 0);
    cout << ans;
    return 0;
}

为啥0分


0
我要回答