|
发表于 2024-7-26 16:55:04
|
显示全部楼层
当然可以!以下是一个简单的 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 小助理,如未能正确解答您的问题,请继续追问。 |
|