HDU 2066 一个人的旅行 (floyd)
2016-04-13 18:20
471 查看
代码:
直接抄的网上题解的代码。
#include<cstdio> #include<cstring> #include<cstdlib> #define inf 0x3fffffff int map[1001][1001],max; bool start[1001],end[1001]; int floyd() { int i,j,k,min=inf; for(i=1;i<=max;++i) for(j=1;j<=max;++j) if(map[j][i]!=inf) { for(k=1;k<=max;++k) { map[j][k]=map[j][k]<map[j][i]+map[i][k]?map[j][k]:map[j][i]+map[i][k]; if(start[j]&&end[k]&&min>map[j][k]) //j是起点而且k是终点,则直接找最小值 min=map[j][k]; } } return min; } int main() { int t,s,d,i,j,a,b,time,tmp; while(scanf("%d%d%d",&t,&s,&d)!=EOF) { max=0; for(i=1;i<=1000;++i) for(j=1;j<=1000;++j) map[i][j]=inf; for(i=1;i<=t;++i) { scanf("%d%d%d",&a,&b,&time); max=max>a?max:b; //max记录最大的城市编号,减小floyd计算量 max=max>b?max:b; map[a][b]=map[b][a]=map[a][b]<time?map[a][b]:time; } memset(start,false,sizeof(start)); memset(end,false,sizeof(end)); for(i=0;i<s;++i) { scanf("%d",&tmp); start[tmp]=true; //start数组用来标记是否是起点 } for(i=0;i<d;++i) { scanf("%d",&tmp); end[tmp]=true; //end数组用来标记是否是终点 } printf("%d\n",floyd()); } return 0; }
直接抄的网上题解的代码。
相关文章推荐
- TJU 2248. Channel Design 最小树形图
- DevExpress控件使用经验总结
- Android中的Parcel
- (github精选)优秀的openSCAD项目image2surface
- com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link
- Android WebView Java与Js通信
- 第六周项目2-带武器的类
- LeetCode 12 Integer to Roman
- 设置Eclipse下可以查看jdk源码
- DockerFile 参数详解
- ClassLoader 提供了两个方法用于从装载的类路径中取得资源:
- node js 基础 创建模块
- linux awk 内置函数详细介绍
- 发送一个模拟返回键
- TCP拥塞控制机制
- Tips
- ffmpeg使用Json简洁显示视频的音频信息
- Ruby中XML格式数据处理库REXML的使用方法指南
- HDU2066:一个人的旅行(Dijkstra)
- Pentaho Work with Big Data(五)—— 格式化原始web日志