农村上起火了,奶牛们正在灭火,农村可以用一个10*10的字符方阵表示,"B"表示着火的牛棚,"L"表示湖,“R"表示一个岩石,奶牛们不能斜着走,不能翻越岩石,用c++写一个程序,输入这个10*10的农场,输出最短的路径
时间: 2024-04-08 17:29:16 浏览: 57
你好!为了解决这个问题,我们可以使用广度优先搜索算法(BFS)来找到最短路径。下面是一个示例的C++程序来实现这个功能:
```cpp
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int N = 10;
// 定义坐标结构体
struct Point {
int x, y;
};
// 定义方向数组,用于表示上、下、左、右四个方向
const int dx[] = {-1, 1, 0, 0};
const int dy[] = {0, 0, -1, 1};
// 判断坐标是否在农场范围内
bool isValid(int x, int y) {
return x >= 0 && x < N && y >= 0 && y < N;
}
// 使用BFS寻找最短路径
int findShortestPath(vector<vector<char>>& farm, Point start, Point end) {
vector<vector<bool>> visited(N, vector<bool>(N, false)); // 记录是否访问过
queue<pair<Point, int>> q; // 存储坐标和步数
q.push({start, 0});
visited[start.x][start.y] = true;
while (!q.empty()) {
Point curr = q.front().first;
int steps = q.front().second;
q.pop();
if (curr.x == end.x && curr.y == end.y) {
return steps; // 找到最短路径,返回步数
}
// 尝试四个方向移动
for (int i = 0; i < 4; i++) {
int nx = curr.x + dx[i];
int ny = curr.y + dy[i];
if (isValid(nx, ny) && !visited[nx][ny] && farm[nx][ny] != 'R') {
q.push({{nx, ny}, steps + 1});
visited[nx][ny] = true;
}
}
}
return -1; // 无法到达终点
}
int main() {
vector<vector<char>> farm(N, vector<char>(N));
// 输入农场地图
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> farm[i][j];
}
}
// 寻找起点和终点
Point start, end;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (farm[i][j] == 'B') {
start.x = i;
start.y = j;
} else if (farm[i][j] == 'L') {
end.x = i;
end.y = j;
}
}
}
// 寻找最短路径
int shortestPath = findShortestPath(farm, start, end);
cout << "最短路径长度为:" << shortestPath << endl;
return 0;
}
```
这个程序使用BFS算法来寻找起点到终点的最短路径长度。其中,`isValid()`函数用于判断坐标是否在农场范围内,`findShortestPath()`函数实现了BFS算法的核心逻辑。程序首先输入农场地图,然后寻找起点和终点,最后输出最短路径的长度。
希望这个程序能够帮助到你!如果有任何问题,请随时问我。
阅读全文