作业记录之Floyed
其实是个数据结构作业啦!干脆写在这里,加深印象(干脆之后就不复习了吧(不
妈妈这人怎么这么懒呀
为什么老师布置作业要用Floyed算法…因为好理解吗…?
之后也把作业搬运过来,顺便复习了orz
介绍一下Floyed
Floyed算法使用带权的邻接矩阵来表示有向网,求从顶点u到v的最短距离。
自己理解的是
1)先定义一个n阶方阵D,D里面存放的是:从两点间单边路径的权(即中间不经过其他点),如果两点之间没有边相连,则权为无穷大(自己到自己是0)。
2)对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比已知的路径更短。如果是的话,就更新更新矩阵D。在这个过程中,不断开放顶点,不断迭代。如此,则D中就包含了最短通路径的信息。
时间复杂度:O(n^3)
空间复杂度:O(n^2)
示例翻课本(。
用Floyd算法求每对顶点间的最短路
描述:求出图的每队顶点的最短路
因为老师主要检验有向图,所以写的程序是有向图的邻接矩阵。如果是无向图,稍加修改就好了~
Path[i][j]:最短路径上顶点v的前一顶点的序号。
D[i][j]:记录顶点