HJ148 迷宫寻路

  • 题目
  • 题解(43)
  • 讨论(10)
  • 排行

简单 通过率:44.72% 时间限制:1秒 空间限制:256M

知识点dfs

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

旺仔哥哥被困在一个 n×mn×m 的矩形迷宫 里。每个格子要么是空地 (用符号 `.` 表示),要么是墙 (用符号 `#` 表示)。旺仔哥哥只能从一个空地移动到其上下左右 相邻的空地。

已知旺仔哥哥的起点为左上角 (1,1)(1,1),终点为右下角 (n,m)(n,m)。请判断他是否能够到达终点。

输入描述:

第一行输入两个正整数 n,m (1≦n,m≦100)n,m (1≦n,m≦100)。

接下来的 nn 行每行输入一个长为 mm 的仅包含字符 `.` 与 `#` 的字符串,描述整个迷宫。

保证起点 (1,1)(1,1) 和终点 (n,m)(n,m) 均为空地。

输出描述:

若旺仔哥哥可以走到终点,则输出单词 YesYes;否则输出 NoNo。

示例1

输入:

复制代码
3 5
.##.#
.#...
...#.

复制输出:

复制代码
Yes

复制说明:

复制代码
路线如下:(1,1)→(2,1)→(3,1)→(3,2)→(3,3)→(2,3)→(2,4)→(2,5)→(3,5)(1,1)→(2,1)→(3,1)→(3,2)→(3,3)→(2,3)→(2,4)→(2,5)→(3,5)
cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int n,m;
char mp[N][N];
int dx[4]={-1,1,0,0},//四个方向
	dy[4]={0,0,-1,1};
bool visited[N][N];//每个可遍历点的状态
void dfs(int x,int y)//深搜算法
{
    visited[x][y] = true;//将每次遍历到的点标记为true
    for(int i=0;i<4;i++)
    {
       int nx = x + dx[i], ny = y + dy[i]; //循环中四个方向会逐一排查  
        if(nx>=0 && nx<n && ny>=0 && ny<m && !visited[nx][ny] && mp[nx][ny] == '.')
		  //满足边界条件(不能超出图的范围)并且该点没被遍历过,并且为'.'
        {
            dfs(nx,ny); //递归继续往后遍历
        }
    }
}
int main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)//将题目所给图输入
    {
        for(int j=0;j<m;j++)
        {
            cin>>mp[i][j];
        }
    }
    dfs(0,0);//调用dfs开始遍历,旺仔哥哥出发点为(0,0)
  
  //遍历完成后得到结果
  //判断右下点是否为true,代码是0-based 注意要-1
    if(visited[n-1][m-1]) cout<<"Yes";
    else cout<<"No";
}
相关推荐
一只小小的芙厨5 分钟前
前缀和与差分
数据结构·算法
船厂电气自动化ai大模型17 分钟前
AI大模型与数学第42课:泰勒级数完整展开(神经网络近似核心)
人工智能·python·深度学习·算法·机器学习
从琳开始98932 分钟前
优选算法——双指针(算法原理+力扣题)
算法·leetcode·职场和发展
从琳开始98934 分钟前
优选算法——滑动窗口(概念+解题模板+LeetCode例题讲解)
算法·leetcode·职场和发展
Nil20836 分钟前
leetcode 94二叉树的中序遍历
算法·leetcode·职场和发展
兔兔兔兔137 分钟前
记录C++ 8
开发语言·c++
不会就选b40 分钟前
算法日常・每日刷题
算法
一只小小的芙厨1 小时前
最短路总结
数据结构·算法
致Great1 小时前
OpenAI 又把 Codex 往前推了一步: 以后做 Agent,没必要都造一个聊天框
算法
脑子不好的小菜鸟1 小时前
秋招、实习 小知识点复习 (C/C++/Linux)—— 碎片时间可看
c++·求职招聘