Bailian3752 走迷宫BFS
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bailian3752 走迷宫BFS相关的知识,希望对你有一定的参考价值。
总时间限制: 1000ms 内存限制: 65536kB
描述
一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。
给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。
输入
第一行是两个整数,R和C,代表迷宫的长和宽。( 1<= R,C <= 40)
接下来是R行,每行C个字符,代表整个迷宫。
空地格子用’.‘表示,有障碍物的格子用’#‘表示。
迷宫左上角和右下角都是’.’。
输出
输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。
样例输入
5 5
…###
#…
#.#.#
#.#.#
#.#…
样例输出
9
问题链接:Bailian3752 走迷宫
问题简述:(略)
问题分析:最短路径问题,用BFS来解决。
程序说明:(略)
参考链接:(略)
题记:(略)
AC的C++语言程序如下:
/* Bailian3752 走迷宫 */
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#define RC 45
using namespace std;
const int dr[] = -1, 1, 0, 0;
const int dc[] = 0, 0, 1, -1;
int r, c;
char b[RC][RC +1], vis[RC][RC];
struct Node
int r, c, step;
;
int bfs(int u, int v)
Node t = u, v, 1;
vis[u][v] = 1;
queue<Node> q;
q.push(t);
while (!q.empty())
t = q.front();
q.pop();
for (int i = 0; i < 4; i++)
int nextr = t.r + dr[i];
int nextc = t.c + dc[i];
if (nextr < 0 || nextr >= r || nextc < 0 || nextc >= c || vis[nextr][nextc] || b[nextr][nextc] != '.')
continue;
if (nextr == r - 1 && nextc == c - 1)
return t.step + 1;
vis[nextr][nextc] = 1;
q.push(nextr, nextc, t.step + 1);
return -1;
int main()
scanf("%d%d", &r, &c);
for (int i = 0; i < r; i++)
scanf("%s", b[i]);
memset(vis, 0, sizeof(vis));
printf("%d\\n", bfs(0, 0));
return 0;
创作挑战赛
新人创作奖励来咯,坚持创作打卡瓜分现金大奖
以上是关于Bailian3752 走迷宫BFS的主要内容,如果未能解决你的问题,请参考以下文章