当需要通过比较节点来保证BFS是最短路径时,需要对队列进行排序。这种情况下,时间复杂度可以达到O(ElogV),其中E和V分别是图的边数和顶点数。
示例代码:
void bfs(int start) {
queue q;
vector visited(n, false);
q.push(start);
visited[start] = true;
while (!q.empty()) {
int node = q.front();
q.pop();
// 处理当前节点
for (int neighbor : graph[node]) {
if (!visited[neighbor]) {
q.push(neighbor);
visited[neighbor] = true;
}
}
// 在处理完当前节点的邻居后进行排序
sort(q.front(), q.back() + 1);
}
}
上一篇:BFS搜索算法
下一篇:BFS算法返回“分段错误”。