Floyd简单证明:
首先我们知道从一个图中可以抽出来单条路,比如下面的这个图
我们可以写成1<—>2<—>3,1<—>3,2<—>1<—>3,2<–>3,2<—>3<—>1,2<—>1,的形式
那么我们假设有个图的某条路a—b---c—d---e—f---g—h
我们只看这条路,其他路不管每次选一个节点做桥梁;
假设第一次选了b节点,然后与b直接相连的两个节点,也就是是a和c,就会被dis[a][c]=min(dis[a][b]+dis[b][c],dis[a][b]),更新,此时a—b---c—d---e—f---g—h这条路径上的从a经过一个点b再到c的最短路就是求出来了,记作a(b)c,为什么只是这条路径呢,因为
有可能在另外一条路上会有X在中间的情况。
然后我们继续选择节点c,此时与c直接相连的就不只有b和d了还有刚才求得的a(b)c,此时的dis[a][d]=dis[a(b)c]+dis[c][d],那么从a到d的最短路也就求出来了,记作a(b)©d;这样推下去,经过点a(b)©(d)(e)(f)(g)的最短路也就出来了,图中所有从a到g的路径取也就出来了,同理任意两个点的最短路也就出来了。