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";
}
相关推荐
chao1898443 小时前
基于 SPEA2 的多目标优化算法 MATLAB 实现
开发语言·算法·matlab
沪漂阿龙3 小时前
AI大模型面试题:支持向量机是什么?间隔最大化、软间隔、核函数、LinearSVC 全面拆解
人工智能·算法·支持向量机
little~钰3 小时前
倍增算法和ST表
算法
知识领航员4 小时前
蘑兔AI音乐深度实测:功能拆解、实测表现与适用场景
java·c语言·c++·人工智能·python·算法·github
薛定e的猫咪4 小时前
因果推理研究方向综述笔记
人工智能·笔记·深度学习·算法
如何原谅奋力过但无声5 小时前
【灵神高频面试题合集06-08】反转链表、快慢指针(环形链表/重排链表)、前后指针(删除链表/链表去重)
数据结构·python·算法·leetcode·链表
平行侠5 小时前
037插入排序 - 整理扑克牌的算法
数据结构·算法
ECT-OS-JiuHuaShan6 小时前
彻底定理化:从量子纠缠到量子代谢
数据库·人工智能·学习·算法·生活·量子计算
jf加菲猫6 小时前
第21章 Qt WebEngine
开发语言·c++·qt·ui