弗洛伊德算法

学习笔记:

 

点击查看代码
void ShortestPath_Floyd(AMGraph G)
{//用Floyd算法求有向网G中各对顶点i和j之间的最短路径
  for(int i=0;i<G.vexnum;i++)//初始各对结点之间已知路径及距离
      for(int j=0;j<G.vexnum;j++)
      {
        D[i][j]=G.arcs[i][j];
        if(D[i][j]<MaxInt &&i!=j)//如果i和j之间有弧,则将j的前驱置为i
          Path[i][j] = i;
          else//否则置为-1
          Path[i][j]=-1;
      }
      for(int k=0;k<G.vexnum;k++)
        for(int i=0;i<G.vexnum;i++)
          for(int j=0;j<G.vexnum;j++){//从i经k到j的一条路径更短
            if(D[i][k]+D[k][j]<D[i][j])
            {
              D[i][j]=D[i][k]+D[k][j];//更新D[i][j]
              Path[i][j] = Path[k][j];//更改j的前驱为K
            }
    }
posted @ 2021-11-16 09:08  一只狗狗  阅读(53)  评论(0)    收藏  举报