当前位置:首页 > 编程笔记 > 正文
已解决

C++广搜例题+代码+讲解(2)

来自网友在路上 170870提问 提问时间:2023-10-24 16:15:42阅读次数: 70

最佳答案 问答题库708位专家为你答疑解惑

        给定一个n行m列的地图(每个格子不是空地就是障碍物),有一个人在地图上移动,他可以上下左右四个方向移动,但不能穿过障碍物。他的初始位置为(x0,y0),他想要到达目标位置(x1,y1),问他最少需要移动多少步。

算法流程如下:

  1. 定义一个结构体表示一个点的位置和步数。
  2. 将起点(x0,y0)入队。
  3. 当队列非空时,取出队列的首元素,判断是否为终点(x1,y1),如果是,返回对应的步数。
  4. 否则,遍历当前点的四个相邻点,并且这些点在地图上不能是障碍物或者越界。对于每一个相邻点,将其位置和步数入队。
  5. 重复步骤3~4,直到队列为空或者找到目标点。
#include <iostream>
#include <cstring>
#include <queue>using namespace std;const int N = 110;char g[N][N];
int dist[N][N];
int n, m;struct Point {int x, y;int step;
};bool check(int x, int y) {if (x < 0 || x >= n || y < 0 || y >= m || g[x][y] == '#') return false;return true;
}int bfs(int sx, int sy, int tx, int ty) {memset(dist, -1, sizeof dist);dist[sx][sy] = 0;queue
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"C++广搜例题+代码+讲解(2)":http://eshow365.cn/6-23474-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!