最短路径算法
Last updated
Was this helpful?
Last updated
Was this helpful?
从一个顶点到其余顶点的最短路径
设G=(V,E)
是一个带权有向图,把图中顶点集合V分成两组,第1组为已求出最短路径的顶点(用S表示,初始时S只有一个源点,以后每求得一条最短路径v,...k
,就将k加到集合S中,直到全部顶点都加入S)。第2组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序把第2组的顶点加入S中。
Floyd 算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径问题。该算法的时间复杂度为 {{}}O(N^{3}){{}},空间复杂度为 {{}}O(N^{2}){{}}
设 {{}}D_{i,j,k}{{}} 为从 {{}}i{{}} 到 {{}}j{{}} 的只以 {{}}(1..k){{}} 集合中的节点为中间节点的最短路径的长度。
因此, {{}}D_{i,j,k}=min(D_{i,k,k-1}+D_{k,j,k-1},D_{i,j,k-1}){{}}。伪代码描述如下: