挑战程序设计——迷宫的最短路径

迷宫最短路径算法
本文介绍了一种求解迷宫从起点到终点最短步数的方法,利用广度优先搜索(BFS)算法实现。文章给出了具体实现代码,通过遍历迷宫地图并标记已访问节点的距离来找到最短路径。

给定一个大小为 N \times MN×M 的迷宫,由通道和墙壁组成。

每一步可以向相邻的上下左右四个方向移动。

请求出起点到终点的最小步数。本题保证从起点一定能走到终点。

# 表示墙壁,不可走。 . 表示通道,可走。S 表示起点。G 表示终点。

输入

  • 第一行两个整数 N, M(1 \leq N,M \leq 100)N,M(1≤N,M≤100)
  • 接下来 NN 行,每行 MM 个字符,表示迷宫

输出

  • 输出一行,表示从起点到终点的最少步数

样例 1

输入

10 10
#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...G#

输出

#include<bits/stdc++.h>
using namespace std;

int N, M;
char ch[105][105];
int arr[105][105];
typedef pair<int,int> P;

int qx, qy, zx, zy;

int dx[4] = {0,0,-1,1};
int dy[4] = {-1, 1, 0, 0};

int bfs(){
    queue<P> que;
    for(int i = 0; i < N; i++){
        for(int j = 0; j < M; j++){
            arr[i][j] = 0x3f3f3f3f;
        }
    }
    qu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值