首页 > 试题广场 >

走迷宫

[编程题]走迷宫
  • 热度指数:15289 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定一个 n \times m 的网格。你从起点 (x_s, y_s) 出发,每一次可以向上、下、左、右移动一步(若不超出边界)。某些格子上存在障碍物,无法经过。求从 (x_s, y_s) 移动到终点 (x_t, y_t) 的最少步数;若无法到达,输出 -1

输入描述:
\hspace{15pt}在一行上输入两个整数 n, m \left(1 \leqq n, m \leqq 1000\right),代表网格的行数与列数。
\hspace{15pt}在一行上输入四个整数 x_s, y_s, x_t, y_t \left(1 \leqq x_s, x_t \leqq n;\ 1 \leqq y_s, y_t \leqq m\right),代表起点与终点的坐标。
\hspace{15pt}此后 n 行,第 i 行输入一个长度为 m 的字符串 g_i,其中
\hspace{23pt}\bullet\,g_{i, j}=\texttt{,表示第 i 行第 j 列为障碍物;
\hspace{23pt}\bullet\,g_{i, j}=\texttt{,表示该格子可通行。
\hspace{15pt}保证起点所在格子可通行。


输出描述:
\hspace{15pt}输出一个整数,表示最少移动次数;若无法到达,输出 -1
示例1

输入

5 5
1 1 5 5
.....
****.
.....
**.**
.....

输出

12
示例2

输入

5 5
1 1 4 5
.....
****.
.....
**.**
.....

输出

-1
示例3

输入

5 5
1 1 5 5
.....
****.
.....
*****
.....

输出

-1
头像 KEY.L
发表于 2022-07-09 21:47:25
题目描述 给定一个n*m的二维整数数组,用来表示一个迷宫 最初,有一个人位于左上角(1, 1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。 请问,该人从左上角移动至右下角(n, m)处,至少需要移动多少次。 数据保证(1, 1)处和(n, m)处的数字为0,且一定至少存在一条通路 展开全文
头像 姐姐的遮阳伞
发表于 2022-04-16 15:23:50
深度优先遍历 用例通过率: 30% 思路: 通过回溯法,找到起点到终点的 所有 路径。然后,在所有路径中取 最小 的那一个。这种方法仅适用于迷宫 比较小 的时候。如果迷宫很大,大概率 超时了! 事实上,深度优先遍历(DFS)就 不太适用于 求最短路径,它一般适用于找 路径的条数。 pub 展开全文
头像 lxh666
发表于 2022-04-15 10:30:03
广度优先 走过标记/不再走 //最短路径 import java.util.*; //最短路径 public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.i 展开全文
头像 Linn在摸鱼
发表于 2022-09-20 12:59:29
r, c = map(int, input().split()) gs = [[1] * c for i in range(r)] k = input().sp 展开全文
头像 哒不溜杰
发表于 2022-03-24 21:05:00
#include <queue> using namespace std; queue<pair<int, int> > q; const int N = 1001; char a[N][N]; int w[N][N]; bool b[N][N]; int x00 展开全文
头像 Coming680
发表于 2022-03-19 14:30:09
首先,若使用回溯的方法会超时,代码如下所示: #include<iostream> #include<vector> #include<queue> #define INF 1e+7 using namespace std; typedef struct node 展开全文
头像 什么又被限制
发表于 2022-10-19 15:24:01
#include <iostream> #include <algorithm> #include <queue> using namespace std; int n, m;//n行m列 展开全文
头像 JensYu
发表于 2023-09-30 17:19:03
n, m = map(int, input().split()) s_x, s_y, e_x, e_y = map(int, input().split()) mtr = [[1]* m for _ in range(n)] for i in range(n): row = input() 展开全文
头像 _Bingbong
发表于 2024-12-12 17:10:32
解题思路 BFS求最短路径解题思路 1. 问题分析 二维网格中找最短路径 可以上下左右四个方向移动 有障碍物不能通过 需要判断是否能到达目标点 2. 解题步骤 数据结构 - 使用二维数组存储网格 - 使用队列进行BFS - 使用二维数组记录距离 - 定义四个方向的移动:dx[] = {-1, 展开全文
头像 饥饿的中国人offer多多
发表于 2025-08-09 22:49:25
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 import java.util.*; public class Main { static int n, m; static int xs, ys, xe, ye 展开全文