Graph 图中最短路径的数目
我需要使用BFS找到图中两个节点之间的所有路径数。我想我的问题的答案可以在这里找到:Graph 图中最短路径的数目,graph,Graph,我需要使用BFS找到图中两个节点之间的所有路径数。我想我的问题的答案可以在这里找到: 但我不太明白。有人能用别的话把算法写下来让我更好地理解吗?假设你需要从src到dest 对于每个顶点x,关联两个值count和val,其中count是从src到x的最短路径数,val是从src到x的最短距离。还要维护一个VISTER变量,告知这是否是第一次访问节点 应用常用的BFS算法 Initialize u = src visited[u] = 1, val[u] = 0 count[u] = 1 Fo
但我不太明白。有人能用别的话把算法写下来让我更好地理解吗?假设你需要从src到dest 对于每个顶点x,关联两个值count和val,其中count是从src到x的最短路径数,val是从src到x的最短距离。还要维护一个VISTER变量,告知这是否是第一次访问节点 应用常用的BFS算法
Initialize u = src
visited[u] = 1,
val[u] = 0
count[u] = 1
For each child v of u,
if v is not visited
第一次访问一个节点时,它只有一条从src到现在通过u的路径,因此到v的最短路径是(1+到u的最短路径),通过最短路径到达v的路径数与计数[u]相同,因为假设u有5条从源到达的路径,那么只有这5条路径可以扩展到v,因为v是第一次通过u遇到的,所以
val[v] = val[u]+1,
count[v] = count[u],
visited[v] = 1
if v is visited
如果已经访问了v,这意味着存在通过其他顶点到达v的其他路径,则会出现三种情况:
val[v]==val[u]+1
count[v] = count[v]+count[u]
val[v]>val[u]+1
val[v]
最后,val[dest]包含到源的最短距离,count[dest]包含从src到dest的路径数。那么,当您调用顶点“已访问”时,这意味着它当前在BFS队列中?因此,当它不再在队列中时,我应该在遇到它时跳过它?另外,我在哪里添加计数值?当我从src顶点的零计数开始时,整个过程都是零。没有访问意味着它只访问一次。当时它不需要排队。伯爵,这是我的错误。初始化计数[src]为1,因为从src到src的方法数为1。在案例2中(val[v]>val[u]+1)。正如答案中所述,我们显然需要更新count[v]和val[v],也就是说,count[v]'和val[v]'。我们是否也应该将任何节点z(其val[z]已设置为val[v]+1)更新为val[v]'+1?此外,我认为我们不应该在到达目的地时就停下来。例如,考虑多个边在DEST结尾的情况,其中两个是最短路径的一部分。是的,你应该是正确的,终止不应该在找到目的地后立即。我不知道为什么我当时没想到。根据您的第一个问题,您又是对的,但由于它是BFS,所以这种情况(val[v]>val[u]+1)不会发生,因为您是逐级进行的。我想我当时也没有注意到这一点。谢谢你强调错误。