当然可以!以下是一个简单的 C++ 实现,使用 BFS 找到小蜜蜂从蜂房 M 到蜂房 N 的路径。假设我们有一个图表示蜂房和它们之间的连接关系:
#include <iostream>
#include <vector>
#include <queue>
#include <unordered_map>
using namespace std;
// 图类,表示蜂房之间的连接
class Graph {
public:
unordered_map<int, vector<int>> adjList; // 邻接表
void addEdge(int u, int v) {
adjList[u].push_back(v);
}
};
int bfs(const Graph& graph, int start, int end) {
queue<pair<int, int>> q; // 队列存放 (当前房间, 当前步数)
unordered_map<int, bool> visited; // 访问标记
q.push({start, 0}); // 从 M 开始,步数为 0
visited[start] = true;
while (!q.empty()) {
auto [room, steps] = q.front();
q.pop();
// 如果到达 N,返回步数
if (room == end) {
return steps;
}
// 遍历相邻的更大的房间
for (int neighbor : graph.adjList.at(room)) {
if (!visited[neighbor]) {
visited[neighbor] = true; // 标记为已访问
q.push({neighbor, steps + 1}); // 将邻居加入队列
}
}
}
// 如果没有找到路径,返回 -1
return -1;
}
int main() {
Graph graph;
// 假设有以下蜂房连接: (1 -> 2), (1 -> 3), (2 -> 4), (3 -> 4), (4 -> 5)
graph.addEdge(1, 2);
graph.addEdge(1, 3);
graph.addEdge(2, 4);
graph.addEdge(3, 4);
graph.addEdge(4, 5);
int M = 1; // 蜜蜂起始房间
int N = 5; // 蜜蜂目标房间
int steps = bfs(graph, M, N);
if (steps != -1) {
cout << "小蜜蜂从房间 " << M << " 到房间 " << N << " 需要 " << steps << " 步。" << endl;
} else {
cout << "小蜜蜂找不到从房间 " << M << " 到房间 " << N << " 的路径啦!" << endl;
}
return 0;
}
### 代码解释:
1. **Graph 类**: 我们使用邻接表来存储蜂房之间的连接关系。
2. **addEdge 方法**: 用于添加一条连接,表示小蜜蜂可以从一个蜂房到另一个蜂房。
3. **bfs 函数**: 实现 BFS 算法,寻找从起始房间到目标房间的最短路径。
- 使用队列来存储当前房间和到达该房间的步数。
- 使用 `visited` 数组来避免走回头路。
4. **主函数**: 创建一个图,添加一些房间之间的连接,然后调用 BFS 函数并输出结果。
运行这段代码后,你将知道小蜜蜂从房间 M 到房间 N 需要多少步,或者是找不到路径!希望这个实现对你有帮助!如果有任何问题,随时问我哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |