等一下
1 个赞
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
// 定义四个方向的偏移量,用于探索上下左右四个相邻的格子
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
// 迷宫函数,使用BFS寻找从起点到终点的最短路径
// maze: 迷宫数组,rows和cols分别为迷宫的行数和列数
// start: 起点坐标,end: 终点坐标
// 返回:从起点到终点的最短路径长度,如果无法到达则返回-1
int bfs(vector<vector<int>>& maze, pair<int, int> start, pair<int, int> end) {
int rows = maze.size();
int cols = maze[0].size();
vector<vector<bool>> visited(rows, vector<bool>(cols, false)); // 记录节点是否已访问
queue<pair<int, int>> q; // 用于BFS的队列
q.push(start); // 将起点加入队列
visited[start.first][start.second] = true; // 标记起点为已访问
int steps = 0; // 记录步数
while (!q.empty()) {
int size = q.size(); // 当前层的节点数
for (int i = 0; i < size; ++i) {
auto curr = q.front(); q.pop(); // 取出当前节点
// 如果当前节点是终点,则返回步数
if (curr == end) return steps;
// 探索当前节点的四个相邻节点
for (int j = 0; j < 4; ++j) {
int nx = curr.first + dx[j];
int ny = curr.second + dy[j];
// 检查相邻节点是否在迷宫内且可走且未访问过
if (nx >= 0 && nx < rows && ny >= 0 && ny < cols && maze[nx][ny] == 0 && !visited[nx][ny]) {
q.push({nx, ny}); // 将相邻节点加入队列
visited[nx][ny] = true; // 标记相邻节点为已访问
}
}
}
++steps; // 完成一层节点的探索,步数加1
}
// 如果队列为空,说明无法到达终点
return -1;
}
int main() {
// 示例迷宫
vector<vector<int>> maze = {
{0, 0, 0, 1, 1, 1},
{1, 1, 0, 1, 0, 1},
{1, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 0, 1},
{1, 0, 0, 1, 0, 0},
{1, 1, 0, 0, 1, 0}
};
pair<int, int> start = {0, 0}; // 起点
pair<int, int> end = {5, 5}; // 终点
int result = bfs(maze, start, end);
if (result != -1) {
cout << "最短路径长度为: " << result << endl;
} else {
cout << "无法到达终点" << endl;
}
return 0;
}
(模版,这是模版!!!!!!!!)
1 个赞
???什么意思
1 个赞
广搜模版!!!有些地方自己改改
1 个赞
我才学深搜
1 个赞
那你用深搜吧
1 个赞
你是为了这个名字发了这句话,还是为了发这句话用这个名字
1 个赞