【发布时间】:2017-11-07 17:26:30
【问题描述】:
所以当队列这样实现时,BFS 的复杂度为 O(|V| + |E|):
ENQUEUE(Q,source_vertex)
while Q != NULL
u=DEQUEUE(Q)
for each v in AdjacencyList[u]
if v not yet visited
Make v visited
ENQUEUE(Q,v)
如果我修改代码以将 u 的邻接列表中的所有顶点添加到队列中,如下所示:
ENQUEUE(Q,source_vertex)
while Q != NULL
u=DEQUEUE(Q)
for each v in AdjacencyList[u]
if v not finalized
ENQUEUE(Q,v)
make u finalized
运行时间还会保持O(|V| + |E|)吗?
提前致谢。
【问题讨论】:
-
如果图有一个循环,你可能会一遍又一遍地将同一个节点排入队列,导致无限循环。还是您的意思不同?
-
嘿,是的,我意识到了,所以我现在编辑了代码。
-
你得到了相互矛盾的答案。我建议您尝试使用不断增加的完整图表来向自己证明答案是否。
标签: algorithm graph-theory graph-algorithm breadth-first-search