首页 > 试题广场 >

迷宫

[编程题]迷宫
  • 热度指数:3012 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定一个 \mathrm{n \times m} 的迷宫,迷宫由 "#" 与"." 两种字符组成。其中 "#" 代表障碍物,"." 表示空地。迷宫中还有一个起点 "S" 和一个终点 "E" ,它们都可以视为空地。

\hspace{15pt}由于近期迷宫发生了塌方,导致起点和终点之间可能并不连通。幸运的是,你拥有一种超能力——在迷宫中移动时(移动方向为上、下、左、右四个方向之一),可以在当前位置朝任一方向(上、下、左、右四个方向之一)释放激光。激光能够清除该方向上所有的障碍物,并且这种超能力至多只能使用一次。

\hspace{15pt}现在,你需要判断是否能利用这种超能力成功从起点到达终点。

输入描述:
\hspace{15pt}第一行给定两个整数 \mathrm{n,m}(\mathrm{2 \leqq n,m \leqq 1000}) ,分别表示迷宫的行数和列数。
\hspace{15pt}下面 \mathrm{n} 行,每行 \mathrm{m} 个字符,描述迷宫的具体布局。字符只包含 "#"、"."、"S" 和 "E",并且起点与终点有且仅有一个。


输出描述:
\hspace{15pt}能够到达终点输出 \mathrm{YES} ;否则输出 \mathrm{NO}
示例1

输入

4 5
.####
S####
.####
.E###

输出

YES
示例2

输入

4 5
..###
S####
#####
##.E#

输出

YES

说明

显然可以从起点出发,到达\mathrm{(1,2)}处并向下方使用超能力,此时可以从起点到达终点。
示例3

输入

4 5
..###
S####
#####
###E#

输出

NO
头像 刘小磊_
发表于 2025-09-16 21:45:51
用dfs解的,其实就是S所在的块的最大最小行和最大最小列和E所在块的最大最小行和最大最小列的范围中 #include<bits/stdc++.h> using namespace std; int n, m; vector<pair<int, int>> min 展开全文
头像 丨阿伟丨
发表于 2025-08-29 13:42:21
题目链接 迷宫 题目描述 给定一个 的迷宫,由 # 与 . 两种字符组成。其中 # 代表障碍物,. 表示空地。迷宫中还有一个起点 S 和一个终点 E,它们都可以视为空地。 由于近期迷宫发生了塌方,导致起点和终点之间可能并不连通。幸运的是,你拥有一种超能力——在迷宫中移动时(移动方向为上、下、左、右 展开全文
头像 草海桐
发表于 2025-09-07 17:42:16
package main /* BFS 分别从S、E出发,把可达位置分别标记为S、E 遍历过程中判断是否有同一行/列或相邻行/列内既含有S,也含有E */ import ( "fmt" ) type Node struct { i, j int } 展开全文
头像 牛客242693846号
发表于 2025-07-28 15:25:19
from collections import deque def bfs(start_x:int, start_y:int, maze:list, n:int, m:int): dist = [[-1]*m for _ in range(n)] dist[start_x][sta 展开全文
头像 牛客69596014号
发表于 2025-12-03 12:39:28
import java.util.Scanner; public class Main { static int[][]move={{0,1},{0,-1},{1,0},{-1,0}}; public static void main(String[] args) { 展开全文
头像 冷艳的西红柿刷牛客
发表于 2025-10-28 17:36:07
#include <iostream> #include <cstring> #include <queue> #include <algorithm> using namespace std; struct Grid { int x; int 展开全文
头像 阿彪b
发表于 2025-12-16 23:29:56
#include <bits/stdc++.h> #include <cstdio> using namespace std; //两次bfs分别记录s和e可以到达的区域,再判断这些区域能不能使用一次激光连通. int main() { int n,m; c 展开全文
头像 牛客459000288号
发表于 2026-01-08 15:34:54
from collections import deque # Process input m, n = map(int, input().split()) mat = [None] * m start = None end = None for i in range(m): mat[i] 展开全文