图--最短路径(Floyd)

图的其他章节

图的单源最短路径

    floyd算法主要用于解决多源最短路径,相比较dijkstra而言其实现更为简单(dijkstra也可以解决多源最短)

实现方式

    每次加入一个节点,尝试是否连通了新的路径使得到各个路径的当前最短路径有变化

图示

    第一次,加入A并将其作为中间顶点

            经过A顶点的新路线有BAC和CAB,显然3>5,更新

    第二次,加入B并将其作为中间顶点

            经过B顶点的新路线有ABC、ABD和CAD,由于ABCAD由不可直达到8,更新

    第三次,加入C并将其作为中间顶点

            经过C顶点的新路线有ACB、ACD和BCD,由于ACB>AB,不更新;AD由8到4,更新,BCD

    第四次加入D,显然BDC

    此时,任意两点的最短距离为

            AB:1

            AC:2

            AD:4

            BC:3

            BD:6

Javascript代码实现

    使用邻接矩阵构建图

    初始化

        定义辅助矩paths,存储找到的顶点在图中的位置,初始为顶点本身在图中的位置

        定义辅助矩阵Gweights,存储顶点间的最短路,初始为图本身

( paths和Gweights将随着顶点的加入不断更新 )

    依次加入顶点作比较更新

        使用三层for循环,第一层i标识中间顶点(依次加入的顶点),第二层j标识源点,第三层k标识终点。则

        i=0标识加入A顶点并以其为中间顶点,此时

            j变化标识从A、B、C、D出发;经过K即A、B、C、D,即AA=0、AB=1、AC=2、AD=infinity等

            则

            j=1,k=2时,G[j][k]标识BC=4,G[i][j]标识AB=1,G[i][k]标识AC=2

            显然

            AB+AC

            故更新





            

        

你可能感兴趣的:(图--最短路径(Floyd))