弗洛伊德算法

初始化

for(i=0;i<n;i++)
    for(j=0;j<n;j++){
        if(i!=j){
            matrix[i][j]=max;
        }
        path[i][j]=j;
}

for(i=0;i<m;i++) {
        scanf("%d%d%d",&x,&y,&z);
        matrix[x][y]=z;
        matrix[y][x]=z;
}

逻辑替换过程代码

for(k=0;k<n;k++){//中转节点
    for(i=0;i<n;i++){//起点
        for(j=0;j<n;j++) {//终点
            //如果借助中转节点,其权值比原权值小,则进行替换
            if(matrix[i][k]+matrix[k][j]<matrix[i][j]) {
                //替换
                matrix[i][j]=matrix[i][k]+matrix[k][j];
                //记录i到j的中转节点k
                path[i][j]=path[i][k];
            }
        }
    }
}

结果分析
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43209531/article/details/89440453
今日推荐