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";
}
相关推荐
圣光SG8 小时前
Java操作题练习(七)
java·开发语言·算法
Cx330_FCQ9 小时前
Tmux使用
服务器·git·算法
拳里剑气11 小时前
C++算法:多源BFS
c++·算法·宽度优先·多源bfs
ysa05103011 小时前
【板子】短序列dp(换成维护更小常数维度的dp)
c++·笔记·算法·板子
shwill12311 小时前
PID 算法(三)--- 增量 PID ↔ 单神经元 PID 等价映射
linux·算法
wabs66613 小时前
关于图论【卡码网110.字符串迁移的思考】
数据结构·算法·图论
hanlin0313 小时前
刷题笔记:力扣第242、349题(哈希表)
笔记·算法·leetcode
aramae13 小时前
C++ IO流完全指南:从C标准库到C++流式编程
服务器·c语言·开发语言·c++·后端
_wyt00114 小时前
c++里的族谱:树
c++·
浮沉98714 小时前
二分查找算法例题(二)
算法