目录
一、算法分析
二、代码实现
三、测试结果
四、leetcode
一、算法分析
1、 问题描述:
设G=为一有向图,V={1,2,…,n},表示顶点编号;E为边的集合,图G中的每一条边(i, j)∈E,对应的距离值为w[i,j]。 顶点i,j间的距离定义为从i出发到j的最短路径长度。
目的:找出图G中每一个顶点到其他所有顶点的距离(有向图,即A到B与B到A的距离可能不一样)。
约定:若(i,j)∉E,则w[i,j]=∞;若i∈V,w[i,i]=0;
问题输入:表示待权有向图G=的n*n矩阵W。
问题输出:对任意的i, j∈V,i到j的距离以及最短路径。
2、分析过程:
(1)设G中两个不同的顶点i,j∈V,p是从i到j其间仅经过{1,2,…,k}的最短路径。
(2)若p不经过顶点k,则p也是从i到j其间敬经过{1,2,…,k-1}的最短路径。
(3)若p经过顶点k,即p–>k–>j。将这两段分别记为p1,p2,则p1是从i到k其间仅经过{1,2,…,k-1}的最短路径,p2是k到j其间仅经过{1,2,…,k-1}的最短路径。(可由反证法证明)
个人理解:k为i到j的最短路径上的一个顶点,则i到k的最短路径+k到j的最短路径,与i到j的最短路径相同,其顶点必定相同。 判断顶点k是否需要加入最短路径,比较(2)与(3)的结果即可,若(2)