本萌新又卡题了!!!

等一下

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 个赞