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;
}
相关推荐
得物技术4 分钟前
得物自研DScript2.0脚本能力从0到1演进
c++
2301_8203010213 分钟前
【机器学习】支持向量机
算法·机器学习·支持向量机
拾忆-eleven19 分钟前
NLP学习路线图(二十):FastText
人工智能·算法·机器学习·nlp
你真会1 小时前
【数据结构知识分享】顺序表详解
数据结构·学习·算法
Two_brushes.1 小时前
高性能分布式消息队列系统(二)
c++·后端·mq
秦少游在淮海1 小时前
C++ - STL #什么是STL #STL的版本 #闭源开源 #STL的六大组件
开发语言·c++
@蓝莓果粒茶2 小时前
LeetCode第245题_最短单词距离III
c语言·c++·笔记·学习·算法·leetcode·c#
闻闻不会编程2 小时前
704. 二分查找 (力扣)
数据结构·算法·leetcode
AndrewHZ2 小时前
【图像处理基石】立体匹配的经典算法有哪些?
图像处理·算法·计算机视觉·滤波·模式识别·立体匹配
AndrewHZ2 小时前
【图像处理入门】4. 图像增强技术——对比度与亮度的魔法调节
图像处理·算法·计算机视觉·几何变换·图像增强·模式识别