1)任何人都有想法获得无向未加权图中最短路径的数量? 我想填充一个二维矩阵,它具有任何i,j顶点的最短路径数, 2)另一个问题是如何以路径必须通过某个顶点的方式获得两个顶点i,j之间的最短路径数。 提前谢谢。
答案 0 :(得分:2)
让admat成为图表的邻接矩阵。然后
admat给出顶点之间的长度为1的路径;
admat ^ 2给出顶点之间的长度为2的路径;
admat ^ 3给出顶点之间的3条路径;
发现模式了吗?
答案 1 :(得分:1)
Dijkstra http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm是你的朋友。要找到包含特定节点的最短路径,请应用Dijkstra以获得从A到B然后从B到C的最短路径。它是......
要获得共享相同成本的路径数量,应该很容易为此修改Dijkstra,以便为您的作业留下一些东西...... :)
答案 2 :(得分:1)
您可以在这种情况下使用BFS。这是一个算法,我刚刚记忆了几年前的一些AI课程。我不能确保它完美无瑕,但希望它会给你一些提示。
让X(p, d)
表示其父级为X
的节点p
,与其父级的距离为d
。
function findAllShortestPaths(...):
RET = set()
queue = [S(None, 0)]
explored = set()
while queue is not empty:
Node = queue.dequeue()
if Node is the one we're searching for:
if Node is not in RET:
RET.add(Node)
else:
if Node.d <= d of the node in RET:
RET.add(Node)
continue
if Node is not in explored:
explored.add(Node)
else:
if Node.d <= d of the node in explored:
explored.add(Node)
else:
continue
for Child in Node.childrens:
if Child is not in explored:
queue.append(Child(Node, Node.d + 1))
return RET, explored
这是一个例子。假设您有一个5点(A,B,C,D,E)图,其线连接如下; AB,BC,CD,DA,EA,EB,EC,ED。您想要找到从A到C的所有最短路径。
让X(parent, distance) ---> Y(...) Z(...)
表示X被添加到被探索的集合中,Y和Z是X的子节点,它们被添加到队列中。
A(None, 0) ---> B(A, 1) E(A, 1) D(A, 1)
B(A, 1) ---> E(B, 2) C(B, 2)
E(A, 1) ---> C(E, 2) D(E, 2)
D(A, 1) ---> C(D, 2)
[E(B, 2) already in the explored list and the distance is 2 > E(A, 1), continue.]
C(B, 2) ---> Our GOAL, add to RET
C(E, 2) ---> Our GOAL, C already in RET but distance is equal, add to RET
[D(E, 2) already in the explored list and the distance is 2 > D(A, 1), continue.]
C(D, 2) ---> Our GOAL, C already in RET but distance is equal, add to RET
最后,RET包含C(B,2),C(E,2),C(D,2)。从这里开始,结合已探索的列表,您可以追溯到源节点。例如,C(B, 2) B(A, 1) A(None, 0)
。
可能存在一些错误,但我认为这不是什么大问题。对于第二个问题,一旦我们弄明白第一个问题,它就不会太遥远。希望它有所帮助!
答案 3 :(得分:0)
Dijkstra's algorithm用于查找最短路径。
NB 如果您尝试将其与shortest path algorithm
搜索一起使用,Google会发现第一件事......
答案 4 :(得分:0)
使用BFS我们可以将复杂性降至最低。
使用BFS,我们必须在每一层中保留额外的计数器Sum(w)。
让s是起始顶点,我们需要找到v的最短路径。
然后让w为L(j-1)中的节点,v为L(j)。
然后S(v)=求和{S(w)} + 1;
和S(v)表示s和v之间的最短路径的数量。