菜鸟的ACM学习之路——Floyd算法

Floyd算法事实上就是Dijkstra算法的一种扩展,Dijkstra算法只能计算单点,但是Floyd算法可以计算多点。

大牛的详解

上代码。

#include
#include
#include
#include
int dp[10010][10010];
using namespace std;
int main()
{
    int i,j,k,m,n,so,to;
    scanf("%d%d",&m,&n);
    scanf("%d%d",&so,&to);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            dp[i][j]=100010;
    for(i=1;i<=m;i++)
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        dp[a][b]=c;   //建图 
        dp[b][a]=c;
    }
    for(k=1;k<=n;k++)
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                if(dp[i][j]>dp[i][k]+dp[k][j])    //一开始都赋为INF 
                    dp[i][j]=dp[i][k]+dp[k][j];     //以k为中间点,dp[i][j]表示从到j最短路,本质是一个DP 
    printf("%d",dp[so][to]);
    return 0;
}

 

你可能感兴趣的:(ACM)