神奇空间房间传送门最少经过数量的C++实现
```cpp #include <iostream> #include <vector> #include <queue> #include <sstream> #include <unordered_set> using namespace std; // 广度优先搜索函数,用于计算从房间A到房间B最少经过的传送门数量 int bfs(const vector<vector<int>>& rooms, int A, int B) { int n = rooms.size(); vector<bool> visited(n, false); queue<pair<int, int>> q; q.push({A - 1, 0}); visited[A - 1] = true; while (!q.empty()) { auto [current_room, steps] = q.front(); q.pop(); if (current_room == B - 1) { return steps; } // 遍历当前房间的所有传送门 for (int portal : rooms[current_room]) { for (int i = 0; i < n; ++i) { if (i != current_room && !visited[i]) { // 检查其他房间是否有相同编号的传送门 for (int other_portal : rooms[i]) { if (other_portal == portal) { q.push({i, steps + 1}); visited[i] = true; break; } } } } } } return -1; } int main() { int N; cin >> N; cin.ignore(); // 忽略换行符 vector<vector<int>> rooms(N); for (int i = 0; i < N; ++i) { string line; getline(cin, line); stringstream ss(line); string token; while (getline(ss, token, ',')) { rooms[i].push_back(stoi(token)); } } int A, B; char comma; cin >> A >> comma >> B; int result = bfs(rooms, A, B); cout << result << endl; return 0; } ``` ### 代码解释: 1. **输入处理**: - 首先读取房间数量`N`。 - 接着循环`N`次,每次读取一行传送门编号,使用`stringstream`将其分割成整数并存储到`rooms`向量中。 - 最后读取出发房间编号`A`和目标房间编号`B`。 2. **广度优先搜索(BFS)**: - 使用队列`q`存储待访问的房间和经过的传送门数量。 - 使用`visited`数组标记房间是否已访问。 - 从房间`A`开始,将其加入队列并标记为已访问。 - 每次从队列中取出一个房间,检查是否到达目标房间`B`,如果到达则返回经过的传送门数量。 - 遍历当前房间的所有传送门,检查其他未访问的房间是否有相同编号的传送门,如果有则将该房间加入队列并标记为已访问。 3. **输出结果**: - 如果能到达目标房间,返回最少经过的传送门数量;否则返回 -1。 ######[AI问答 | 760点数解答 | 2026-02-14 20:12:39]
- 易语言读取文本文件并显示到超级列表框:代码示例与注意要点(DeepSeek | 571点数解答 | 2025-08-23 20:54:40)205
- 易语言:读取并显示特定文本到超级列表框,还能增加新数据的方法与要点(DeepSeek | 1317点数解答 | 2025-08-23 20:58:40)212
- mallshop商城网站:数据库设计与强大业务功能全揭秘(GPT | 257点数解答 | 2024-12-09 14:08:15)257
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)320
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)289
- 校园代表性事件:学生应对挫折展现坚韧与成长 (字节豆包 | 301点数解答 | 2025-03-25 21:15:18)283
- 校园运动会:摔倒学生不惧挫折坚持完赛彰显坚韧精神(字节豆包 | 121点数解答 | 2025-04-05 15:04:18)183
- 周末登山遇风雨,学生携手登顶展坚韧(字节豆包 | 159点数解答 | 2025-04-05 15:23:38)143
- 揭秘!任意各位不同三位数经变换最终如何锁定 495 及编程求解变换次数(字节豆包 | 167点数解答 | 2025-04-22 20:47:58)309
- 2019编程竞赛:学生面对算法困境,拆解难题与团队协作破局之道 (DeepSeek | 127点数解答 | 2025-09-13 11:43:59)50
- 2024 校运惊魂:受伤学生摔倒不馁勇冲终点! (字节豆包 | 262点数解答 | 2025-09-13 11:44:20)71
- 2025 年教室数学考试:学生积极纠错进步,编程开发需防三大“陷阱” (DeepSeek | 88点数解答 | 2026-01-29 20:18:22)21