实验五第二题做完
This commit is contained in:
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user