使用cpp使用BFS搜索算法从左上开始遍历,找到不为-1最小遍历次数的程序
时间: 2024-05-11 22:20:27 浏览: 54
以下是使用C++实现BFS搜索算法从左上开始遍历,找到不为-1最小遍历次数的程序:
```cpp
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int N = 100; // 矩阵大小
const int INF = 1e9; // 表示不可达
int maze[N][N]; // 迷宫矩阵
int d[N][N]; // 距离
int dx[4] = {1, 0, -1, 0}; // 方向数组
int dy[4] = {0, 1, 0, -1};
// BFS搜索
int bfs(int sx, int sy, int gx, int gy) {
queue<pair<int, int>> q;
q.push(make_pair(sx, sy));
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
d[i][j] = INF;
}
}
d[sx][sy] = 0; // 起点距离为0
while (!q.empty()) {
pair<int, int> p = q.front();
q.pop();
if (p.first == gx && p.second == gy) break; // 到达终点
for (int i = 0; i < 4; i++) {
int nx = p.first + dx[i];
int ny = p.second + dy[i];
if (0 <= nx && nx < N && 0 <= ny && ny < N && maze[nx][ny] != -1 && d[nx][ny] == INF) {
q.push(make_pair(nx, ny));
d[nx][ny] = d[p.first][p.second] + 1; // 更新距离
}
}
}
return d[gx][gy];
}
int main() {
// 输入迷宫矩阵
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> maze[i][j];
}
}
int ans = INF;
// 枚举终点
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (maze[i][j] != -1) {
ans = min(ans, bfs(0, 0, i, j));
}
}
}
if (ans == INF) {
cout << "无法到达终点" << endl;
} else {
cout << "最小遍历次数为:" << ans << endl;
}
return 0;
}
```
程序中,使用`maze`数组表示迷宫矩阵,-1表示障碍物,其他数字表示可达点。`d`数组表示起点到每个点的距离,初始值为INF表示不可达。使用BFS搜索算法,从起点开始遍历迷宫,每次更新距离,直到搜索到终点或者队列为空。最后枚举所有不为-1的点作为终点,求出最小遍历次数。如果无法到达终点,输出无法到达的提示信息。
阅读全文