Bailian3752 走迷宫BFS

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bailian3752 走迷宫BFS相关的知识,希望对你有一定的参考价值。

3752:走迷宫

总时间限制: 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的主要内容,如果未能解决你的问题,请参考以下文章

[北大机试C]:走迷宫(BFS)

迷宫bfs+路径记录

杭电 逃离迷宫 BFS

bfs-迷宫

HDU 1728 逃离迷宫(DFS||BFS)

2753:走迷宫