HDU-2066 一个人的旅行(图论,Floyd ,最短路)
来源:互联网 发布:程序员 转行 编辑:程序博客网 时间:2024/05/17 02:56
比这一题更简单粗暴的:HDU 2544 不用优化就过 = =
Input:
输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个;
接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b之间可能有多条路)
接着的第T+1行有S个数,表示和草儿家相连的城市;
接着的第T+2行有D个数,表示草儿想去地方。
Output:
输出草儿能去某个喜欢的城市的最短时间。
一开始用 Floyd 算法,毫无优化,超时的太带感了 = =
题目稍微有个小坑,之间可能有多条路,所以输入的时候就要注意,将两个城市之间花费最小的时间存起来,多的扔掉。
其实不是很明白 Floyd 算法...按自己的理解是以 K 为中介点,枚举所有任意两个城市的距离,
i 点 与 j 点,将时间花销最小的存在数组内。
两个城市不能通路,就将这两个城市的时间花销初始化为最大,INF 。
250ms代码(附送注释):
#include<cstdio>#include<cstring>#include <cmath>#include<algorithm>using namespace std;const int INF = 1<<27;const int MAXN = 1000+5;int path[MAXN][MAXN];bool start[MAXN];bool destination[MAXN];int maxid;int Floyd ( void ){ int mini = INF; for( int k = 1; k<=maxid;++k) for( int i = 1; i<=maxid;++i ) if( path[i][k]!=INF )//优化:INF 此路不通 不必再做无谓的比较 for( int j = 1; j<=maxid;++j) { if( path[i][j] > path[i][k] + path[k][j] ) path[i][j] = path[i][k] + path[k][j]; // 每句所有 从不同的开始地点 到 目的地 花费的时间,找出最小的 if ( start[i] && destination[j] && ( mini > path[i][j] ) ) mini = path[i][j]; } return mini;}int main(){ int t,s,d; int link; int a,b,temp; while( ~scanf("%d %d %d",&t,&s,&d)) { for( int i=0; i<MAXN; ++i) for( int j = 0; j<MAXN ;++j) path[i][j] = INF; maxid = 0; while ( t-- ) { scanf("%d %d %d",&a,&b,&temp); maxid = max( a,max( b, maxid)); // 优化 比较次数 path[a][b] = path[b][a] = min(temp,path[a][b]);// 之间可能有多条路径,选取花费时间最少的 }// end of path's data memset(start,false,sizeof(start)); memset(destination,false,sizeof(destination)); while(s--) { scanf("%d",&link); start[link] = true; }//出发城市 while(d--) { scanf("%d",&link); destination[link] = true; }//目的地城市 // end of cities's data printf( "%d", Floyd() ); puts(""); } return 0;}
0 0
- HDU-2066 一个人的旅行(图论,Floyd ,最短路)
- HDU-2066 一个人的旅行(最短路[Floyd])
- HDU 2066 一个人的旅行 (最短路----floyd && dijkstra)
- HDU 2066-一个人的旅行(Floyd任意两点最短路)
- hdu 2066 一个人的旅行 (多源最短路 Floyd)
- HDU-2066 一个人的旅行 最短路
- hdu 2066 一个人的旅行(最短路)
- hdu 2066 一个人的旅行(最短路)
- hdu 2066 一个人的旅行(最短路)
- HDU - 2066- 一个人的旅行【最短路】
- 【hdu 2066】 一个人的旅行 ( 最短路 Dijkstra)
- hdu 2066 一个人的旅行(最短路问题)
- HDU 2066 一个人的旅行(最短路)
- HDU 2066一个人的旅行(dijk最短路)
- HDU 2066-一个人的旅行(最短路Dijkstra)
- HDU 2066(一个人的旅行) SPFA(最短路问题)
- HDU 2066 一个人的旅行(最短路)
- HDU---2066-一个人的旅行(最短路)
- hdu 1418 抱歉
- 学习OpenCV之CV篇
- cocos2d-x lua 学习笔记
- tomcat6.0的大量CLOSE_WAIT解决方案
- 奥利奥,加油!
- HDU-2066 一个人的旅行(图论,Floyd ,最短路)
- 汉语语义理解
- 关于微信小店,来听听第三方开发者的心声
- hdu1069 Monkey and Banana
- 浅析Makefile
- linux内核内存管理(zone_dma zone_normal zone_highmem)
- poj1141 Brackets Sequence 括号序列
- 关于对象初始化的一些建议
- Reactor/Proactor模型简介