最短路径算法(Dijkstra算法、Floyd-Warshall算法)
最短路径算法具体的形式包括:
确定起点的最短路径问题:即已知起始结点,求最短路径的问题。适合使用Dijkstra算法。
确定终点的最短路径问题:即已知终结结点,求最短路径的问题。在无向图中,该问题与确定起点的问题完全等同;在有向图中,该问题等同于把所有路径方向反转的确定起点的问题。
确定起点终点的最短路径问题:即已知起点和终点,求两结点之间的最短路径。
全局最短路径问题:求图中所有的最短路径。Floyd-Warshall算法。
dijkstra算法思想:
开始时,S={u},T=V-{u}; 对T中所有顶点x,如果u到x存在边,置d(u,x)=c(u,x); 否则d(u,x)=无穷大。
循环:对T中所有顶点x,寻找d(u,x)最小的顶点t,即:d(u,t)=min{d(u,x)|x属于T},则d(u,t)就是顶点t到顶点u的最短路径距离。同时,顶点t也是集合T中所有顶点距离u最近的顶点。把顶点t从T中删除,把它并入S。然后对T中与t相邻接的所有顶点x,用下面的公式更新d(u,x)的值:d(u,x)=min{d(u,x), d(u,t) +c(t,x)}。
继续“循环”,一直到T空为止。
Floyd-Warshall算法和dijkstra算法思想类似:都是通过绕行中间节点找到端到端的最短路径,不再描述。