hdu2544

FLYOD算法

正如我们所知道的,Floyd算法用于求最短路径。Floyd算法可以说是Warshall算法的扩展,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3)。

Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B。所以,我们假设Dis(AB)为节点A到节点B的最短路径的距离,对于每一个节点X,我们检查Dis(AX) + Dis(XB) < Dis(AB)是否成立,如果成立,证明从A到X再到B的路径比A直接到B的路径短,我们便设置Dis(AB) = Dis(AX) + Dis(XB),这样一来,当我们遍历完所有节点X,Dis(AB)中记录的便是A到B的最短路径的距离。

for ( int i = 0; i < 节点个数; ++i ) 
{ 
    for ( int j = 0; j < 节点个数; ++j ) 
    { 
        for ( int k = 0; k < 节点个数; ++k ) 
        { 
            if ( Dis[i][k] + Dis[k][j] < Dis[i][j] ) 
            { 
                // 找到更短路径 
                Dis[i][j] = Dis[i][k] + Dis[k][j]; 
            } 
        } 
    } 
} 

flyod 具体讲解

Problem Description
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

 

Input
输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。
输入保证至少存在1条商店到赛场的路线。
 

Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
 

Sample Input
    
    
2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
 

Sample Output
    
    
3 2
 
#include <iostream>
#include <cstdio>
using namespace std;
const int M = 10001;
int map[M][M];
int main()
{
    int n,m;
    while(cin>>n>>m,n||m)
    {
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            map[i][j]=100000;
        int a,b,c;
        for(int i=1;i<=m;i++)
        {
            cin>>a>>b>>c;
            if(map[a][b]>c)
                map[a][b]=map[b][a]=c;
        }
        for(int k=1;k<=n;k++)
            for(int i=1;i<n;i++)
                for(int j=1;j<=n;j++)
                if(map[i][k]+map[k][j]<map[i][j])
						map[i][j]=map[i][k]+map[k][j];
        cout<<map[1][n]<<endl;
    }
}




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值