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 小时前
C++OJ题经验总结(竞赛)3
开发语言·c++·笔记·算法
NiceCloud喜云3 小时前
Anthropic 发布 Project Glasswing:未公开模型 Mythos 已挖出 10000+ 漏洞,含 OpenBSD 27 年老 bug
android·java·数据库·c++·python·docker·bug
手写码匠4 小时前
从零手写 SQL 查询引擎:解析器、优化器与执行器实战
人工智能·深度学习·算法·aigc
香蕉鼠片4 小时前
八股C++(二)
开发语言·c++
Tisfy4 小时前
LeetCode 3121.统计特殊字母的数量 II:状态机
算法·leetcode·题解·状态机
zzzsde4 小时前
【Linux网络】传输层协议UDP
linux·服务器·开发语言·网络·算法·udp
格发许可优化管理系统4 小时前
解决Mentor许可冲突,让您的业务无缝运行
运维·服务器·c语言·c++·人工智能
洛水水4 小时前
【力扣100题】61.和为 K 的子数组
算法·leetcode·哈希算法
思麟呀4 小时前
在C++基础上理解CSharp-4
开发语言·jvm·c++·c#
兰令水4 小时前
leecodecode【滑动窗口】【2026.5.27打卡-java版本】
java·数据结构·算法