最短路径—每一对点的最短距离——弗洛伊德

来源:互联网 发布:tiger水杯 知乎 编辑:程序博客网 时间:2024/06/05 19:57
对两点之间距离不断缩小


代码
voidFloyed(MGraph G)
{
    intC[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //C中存放最短距离,path中存放最短路径
    intpath[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
    inti,j,k;
    for(i=0;i<G.vexnum;i++)
        for(j=0;j<G.vexnum;j++) //初始化
        {
            C[i][j]=G.arcs[i][j];
                path[i][j]=-1;          
        }
    for(k=0;k<G.vexnum;k++)                                    
        for(i=0;i<G.vexnum;i++)
            for(j=0;j<G.vexnum;j++)
                if(C[i][j]>C[i][k]+C[k][j])   //找到更短路径
                {
                    C[i][j]=C[i][k]+C[k][j];  //修改路径长度
                    path[i][j]=k;   //修改最短路径为经过点k
                }
    DispAllPath(G,C,path);
}
0 0
原创粉丝点击