实验五第二题做完

This commit is contained in:
2024-12-05 18:53:08 +08:00
parent f2590db299
commit b8cde94091
2 changed files with 68 additions and 13 deletions
+33
View File
@@ -5,6 +5,7 @@
#ifndef LIST_GRAPH_H
#define LIST_GRAPH_H
#include <queue>
#include <sstream>
#include<vector>
@@ -116,6 +117,38 @@ public:
}
return ss.str();
}
vector<T> BFS(int startId) {
if (startId >= nodes.size() || startId < 0) {
throw NodeIdOutOfRangeException("起始节点id超出范围", 0X004);
}
vector<bool> visited(nodes.size(), false);
queue<int> q;
vector<T> result;
// 标记起始节点已访问
visited[startId] = true;
q.push(startId);
while (!q.empty()) {
int currentId = q.front();
q.pop();
result.push_back(currentId);
node* current = nodes.at(currentId);
// 跳过id节点和值节点
current = current->next->next;
while (current != NULL) {
int neighborId = current->data;
if (!visited[neighborId]) {
visited[neighborId] = true;
q.push(neighborId);
}
current = current->next;
}
}
return result;
}
};