#include<bits/stdc++.h>
using namespace std;
int n,a[10][10],cnt=0;
int dir[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,-1},{-1,1},{-1,-1},{1,1}};
bool vis[10][10];
void dfs(int x,int y)
{
    vis[x][y]=1;
    if(x==1&&y==n)
    {
        cnt++;
        return;
    }
    else
        for(int i=0;i<n;i++)
        {
            int nx=x+dir[i][0],ny=y+dir[i][1];
             
            if(!vis[nx][ny]&&nx>=1&&nx<=n&&ny>=1&&ny<=n&&a[nx][ny]==0)
            {
                vis[nx][ny]=1;
                dfs(nx,ny);
                vis[nx][ny]=0;
            }
        }
     
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
    dfs(1,1);
    cout<<cnt;
    return 0;
}

1 条评论

  • //AC了
    #include<bits/stdc++.h>
    using namespace std;
    int n,a[15][15],cnt,dir[8][2]={{-1,0},{0,1},{1,0},{0,-1},{-1,-1},{-1,1},{1,1},{1,-1}};
    bool vis[15][15];
    void dfs(int x,int y)
    {
        vis[x][y]=1;
        if(x==1&&y==n)
        {
            cnt++;
            return;
        }
        else
            for(int i=0;i<8;i++)
            {
                int nx=x+dir[i][0],ny=y+dir[i][1];
                if(!vis[nx][ny]&&a[nx][ny]==0&&nx>=1&&nx<=n&&ny>=1&&ny<=n)
                {
                    vis[nx][ny]=1;
                    dfs(nx,ny);
                    vis[nx][ny]=0;
                }
            }
    }
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)   
                cin>>a[i][j];
        dfs(1,1);
        cout<<cnt;
        return 0;
    }
    
  • 1

信息

ID
1564
难度
8
分类
(无)
标签
递交数
12
已通过
8
通过率
67%
被复制
8
上传者