C++ 迷宫问题 题解

问题描述

设有一个 N×N(2≤N<10)方格的迷宫,入口和出口分别在左上角和右上角

迷宫格子中分别放0 和 1,0 表示可通,1 表示不能,入口和出口处肯定是00

迷宫走的规则如下所示:

从某点开始,有八个方向可走,前进方格中数字为 0 时表示可通过,为 1 时表示不可通过

找出所有从入口(左上角)到出口(右上角)的路径(不能重复),输出路径总数,如果无法到达,则输出 0

输入格式

第一行输入一个整数N

接下来N行N列,输出一个0/1矩阵

输入样例

复制代码
3
0 0 0
0 1 1
1 0 0

输出样例

复制代码
2

思路:

用DFS,注意回溯

AC代码:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int dir[][2]={0,1,0,-1,1,0,-1,0,-1,-1,-1,1,1,-1,1,1};
bool vis[15][15];
int mat[15][15],cnt=0,n;
void dfs(int r,int c)
{
    if(r==1&&c==n)
    {
        cnt++;
        return;
    }
    for(int i=0;i<8;i++)
    {
        int dr=r+dir[i][0],dc=c+dir[i][1];
        if(dr>=1&&dc>=1&&dr<=n&&dc<=n&&!mat[dr][dc]&&!vis[dr][dc])
        {
            vis[dr][dc]=true;
            dfs(dr,dc);
            vis[dr][dc]=false;
        }
    }
}
int main()
{
    cin >> n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cin >> mat[i][j];
        }
    }
    vis[1][1]=true;
    dfs(1,1);
    cout<<cnt;
    return 0;
}
相关推荐
苏比的博客3 小时前
Windows MFC添加类,变量,类导向
c++·windows·mfc
yudiandian20143 小时前
MFC - 使用 Base64 对图片进行加密解密
c++·mfc
yudiandian20143 小时前
MFC - Picture Control 控件显示图片
c++·mfc
电鱼智能的电小鱼6 小时前
基于电鱼 AI 工控机的智慧工地视频智能分析方案——边缘端AI检测,实现无人值守下的实时安全预警
网络·人工智能·嵌入式硬件·算法·安全·音视频
孫治AllenSun7 小时前
【算法】图相关算法和递归
windows·python·算法
格图素书8 小时前
数学建模算法案例精讲500篇-【数学建模】DBSCAN聚类算法
算法·数据挖掘·聚类
我是李武涯8 小时前
从`std::mutex`到`std::lock_guard`与`std::unique_lock`的演进之路
开发语言·c++
DashVector9 小时前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
AI纪元故事会9 小时前
【计算机视觉目标检测算法对比:R-CNN、YOLO与SSD全面解析】
人工智能·算法·目标检测·计算机视觉
夏鹏今天学习了吗9 小时前
【LeetCode热题100(59/100)】分割回文串
算法·leetcode·深度优先