给定无向(无长度)图G =(V,E),其中| V | = n和| E | = m,并且两个顶点v,w,找到输出最短vw路径数的算法在G.运行时间应为O(m + n)
我一直在处理这个问题,但很难让运行时间为O(m + n)
由于这个图既是无向的,也没有加权,我试过这种方式。使用BFS确定最短v-w路径的长度。然后使用DFS查找v-w最短路径的数量,以便连接两个节点,路径长度等于BFS的输出。 但该计划的运行时间为O(m + n)+ O(m + n)。
我也尝试修改Dijkstra算法。存在添加到受访节点集的节点时,存储最短路径的长度和最短路径的数量。而且我一直在计算运行时间。
答案 0 :(得分:1)
这个问题可能正在寻找Dijsktra's algorithm的修改。使用Dijkstra算法,您可以为每个节点维护到该节点的最短路径的长度,并根据到相邻节点的最短路径以及该邻近节点的简单链路长度在节点上更新节点到有问题的节点。
在你可以保留的每个节点,以及到达它的最短路径的长度,在它的最短路径上可以在它之前的节点表,以及到该节点的最短路径的数量,这应该是是这些邻居的最短路径的总和。当您找到到节点的新最短路径时,您要么删除所有这些信息(如果新的最短路径比以前短),要么更新该表中路径中第二个最后一个节点的条目,如果新路径是与前一个到该节点的最短路径相同的长度。
答案 1 :(得分:1)
您可以在O(N)中找到使用修改后的BFS的不同路径的数量。这是solution。