1 条题解

  • 2
    @ 2024-1-29 20:55:41

    迷宫问题 是一道很经典的DFS 从题目中我们要从左上角移到右下角 有8个方向其中#为墙,只要我们递归到这里就要返回。

    但是有人却一直卡在递归里,因为还有一个重要的因素判重, 简单来说就是定义一个bool类型的二维数组,这个数组就是来记录有没有到过这里,如果之前来过就返回, 不然你的程序就会在两个点中反复横跳。

    别问我怎么知道的

    代码如下:

    #include<bits/stdc++.h>//华丽的开始
    using namespace std;
    bool f[11][11];
    int n,a[11][11],ans=0;
    const int o[9]={0,0,-1,1,-1,1,-1,1};
    const int p[9]={1,-1,0,0,-1,1,1,-1};//精彩的定义
    void dg(int x,int y){// 细心的搜索
        if(x==1&&y==n){
           ans++;
        return;
    }
    if(x<1||y<1||x>n||y>n||f[x][y]||a[x][y]==1)
        return;
        f[x][y]=1;
        for(int i=0;i<8;i++)
            dg(x+o[i],y+p[i]);
        f[x][y]=0;
    }
    int main(){//主函数
        cin>>n;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                cin>>a[i][j];
        dg(1,1);
        cout<<ans;//答案输出
        return 0;//完美的结束
    }
    

    绝对正确(不对你打我)

    信息

    ID
    15
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    9
    已通过
    4
    上传者