题目:计算下面此图任意两点之间的最短路径
此图带权重的邻接矩阵如下:
① |
② |
③ |
④ |
⑤ |
⑥ |
⑦ |
⑧ |
⑨ |
|
① |
0 |
5 |
3 |
∞ |
∞ |
∞ |
∞ |
∞ |
∞ |
② |
5 |
0 |
∞ |
1 |
3 |
6 |
∞ |
∞ |
∞ |
③ |
3 |
∞ |
0 |
∞ |
8 |
7 |
∞ |
∞ |
∞ |
④ |
∞ |
1 |
∞ |
0 |
∞ |
∞ |
3 |
∞ |
∞ |
⑤ |
∞ |
3 |
8 |
∞ |
0 |
∞ |
5 |
2 |
∞ |
⑥ |
∞ |
6 |
7 |
∞ |
∞ |
0 |
6 |
6 |
∞ |
⑦ |
∞ |
∞ |
∞ |
3 |
5 |
6 |
0 |
∞ |
4 |
⑧ |
∞ |
∞ |
∞ |
∞ |
2 |
6 |
∞ |
0 |
3 |
⑨ |
∞ |
∞ |
∞ |
∞ |
∞ |
∞ |
4 |
3 |
0 |
Floyed算法实现的原理:
假设有一个最简单的图如下所示,图含有三个顶点A、B、C,求AB、AC、BC之间的最短路径
在求AC之间的最短路径时,假如我们无视B这个顶点,则图其实可以简单的理解为:
我们将三个点之间的问题变成了两个点之间的问题,AC之间的最短路径已经变成了比较实线与虚线之间的长短问题,同理,四个点的最短路径问题也可以通过类似的方式变成三个点的问题再变成两个点的问题。
假设所有路径都有且只经过第一个点
回到最初的问题中来
在图的邻接矩阵中已经定义好了两点之间的已知最短路径(此时都是实线的长度),我们假设任意两个点(假设为X、Y)之间都有且只经过第一个点,这样子X、Y两点之间的路径问题变成了我们上述实线与虚线的问题,