只有五行的算法》》Foloyd-Warshall算法(多元最短路径问题)

#include<stdio.h>
int main()
{
    int INF=9999999;//音节划分:无穷的 infinite
    int map[100][100];
    int N,M;
    scanf("%d%d",&N,&M);
    int i,j;
    int k;
    for(i=1;i<=N;i++)
        for(j=1;j<=N;j++){
            if(i==j)
                map[i][j]=0;
            else
                map[i][j]=INF;
        }
        int m;
        for(k=1;k<=M;k++){
            scanf("%d%d%d",&i,&j,&m);
            map[i][j]=m;
        }
//下面就是传说中的“只有五行的算法”——Floyd-Warshall
//****************************************************
        for(k=1;k<=N;k++)
        for(i=1;i<=N;i++)
            for(j=1;j<=N;j++)
                if(map[i][k]<INF&&map[k][j]<INF&&map[i][j]>map[i][k]+map[k][j])
                    //寻找i-->j最小距离
                    map[i][j]=map[i][k]+map[k][j];
//****************************************************
//下面就是传说中的“只有五行的算法”——Floyd-Warshall
    for(i=1;i<=N;i++)
        for(j=1;j<=N;j++)
            printf("%d-->%d: %d\n",i,j,map[i][j]);
    return 0;
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。