hdu2544
来源:互联网 发布:知行劳务 编辑:程序博客网 时间:2024/06/05 00:14
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条商店到赛场的路线。
输入保证至少存在1条商店到赛场的路线。
Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
Sample Input
2 11 2 33 31 2 52 3 53 1 20 0
Sample Output
32
#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; }}
0 0
- hdu2544
- hdu2544
- hdu2544
- hdu2544
- HDU2544
- hdu2544
- hdu2544
- hdu2544
- hdu2544
- hdu2544
- HDU2544 spfa
- HDU2544 spfa
- hdu2544(最短路径)
- hdu2544最短路
- hdu2544最短路
- hdu2544(最短路)
- hdu2544最短路
- hdu2544 bellmanford实现
- mysql 用户权限管理
- oracle 【AWR】调整AWR数据采样时间间隔及历史快照保留时间
- html5学习笔记1--video标签
- 内存使用情况
- 3.1 什么是内核对象
- hdu2544
- 功能点(Funciton Point FP)估算法(三) 调整因子
- GCD的异步处理
- win7上部署aspx网站
- 隐式转换带来的麻烦
- 关于linux操作系统下的互斥量的建立
- 多态
- MyBatis入门示例——MyBatis学习笔记之一
- 功能点(Funciton Point FP)估算法(四) 功能点估算法