我试图找到所有最短路径,其中所有路径都具有值1。 我用过改良的BFS。我也将封闭的节点添加到队列中。当我找到终端节点时,我停止添加节点并只计算队列中的结束节点。但它对我的测试输入没有用。为什么我的想法不好?
伪代码
addIntoQueue(startNode)
while(!queueIsEmpty()){
nodeMain = dequeue()
if(nodeMain==stopNode){
found=true
count++
}
if(!found)
for(all node in NodeNeighbors){
if(node!=CLOSED){
addToQueue(node)
}
}
nodeMain=CLOSED
}
答案 0 :(得分:0)
以下是您的代码中的一些问题:
0
- 但是,它会陷入无限而是循环。target
距离4
的深度为source
,并且路径为source->v1->v2->target
。现在,假设您的图表中还有一个路径source->v3->v4->v5->target
,并且由于某种原因v4
在target
之前插入了队列(可能会发生这种情况,对其之间的排序没有限制)这些2)。您还可以将target
再次添加到边(v5,target)
的队列中,并计算路径source->v3->v4->v5->target
,但这不是最短路径 - 但您确实计算了它... < / LI>
醇>
以此图表为例:
在上面,您首先从s
开始,并将其所有邻居添加到队列中。现在,我们假设在v2
之前添加了v1
(可能会发生这种情况,没有什么能阻止它......)
现在,在下一步,v2
将被展开,您将v3
添加到队列中。
接下来,处理v1
并将target
添加到队列中。
现在,处理v3
并再次将target
添加到队列中。
现在,处理target
,count
增加,并设置标记found
。
队列尚未清空,您现在处理target
- 并再次增加count
。
结果,完成后 - count == 2
,但只有最短的路径。这是因为您还计算了路径s->v2->v3->t
。