Problem Description
虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可怜啊~)。
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
输出草儿能去某个喜欢的城市的最短时间。
Sample Input
  
6 2 3 1 3 5 1 4 7 2 8 12 3 8 4 4 9 12 9 10 2 1 2 8 9 10
Sample Output
  
9
思路:看源码,很少写过注释这么多的代码。。。
#include <stdio.h>
#include <string.h>int dis[1001][1001];//两点之间所需的时间
int d[1001];//起点到该点的最短时间
int vis[1001];
int INF=9999999;int main()
{int T,S,D,i,j,maxindex,a,b,time,t,min,index;while(~scanf("%d%d%d",&T,&S,&D)){for(i=0;i<=1000;i++) for(j=0;j<=1000;j++) dis[i][j]=INF;//初始化,两点之间距离无限大memset(vis,0,sizeof(vis));//标志数组清零memset(d,INF,sizeof(d));//到起点的时间无限大maxindex=0;for(i=0;i<T;i++){scanf("%d%d%d",&a,&b,&time);dis[a][b]=dis[b][a]=time<dis[a][b]?(dis[b][a]<time?dis[b][a]:time):(dis[b][a]<dis[a][b]?dis[b][a]:dis[a][b]);//取最小时间maxindex=a>maxindex?a:maxindex;maxindex=b>maxindex?b:maxindex;}for(i=0;i<S;i++){scanf("%d",&a);d[a]=0;//以家为起点,到附近车站时间设为0}//下面求出起点到每一个点的最小时间t=maxindex-1;//最后一个点没有再处理的必要while(t--)//t个点,处理t次{min=INF;for(i=1;i<=maxindex;i++)//找出未标志过的点中到起点时间最小的点{if(!vis[i] && d[i]<min){min=d[i];index=i;}}vis[index]=1;//标志该点for(i=1;i<=maxindex;i++)//更新各点到起点的最小时间{if(!vis[i] && dis[index][i]<INF && d[i]>d[index]+dis[index][i]) d[i]=d[index]+dis[index][i];}}//处理完毕min=INF;for(i=0;i<D;i++){scanf("%d",&a);//继续输入if(d[a]<min) min=d[a];}printf("%d\n",min);}
}

一个人的旅行(Dijkstra算法)相关推荐

  1. HDU杭电2066 - 一个人的旅行(Dijkstra算法)

    2018-5-1 今天抽时间看了最短路的几种算法: 这道题目用的是Dijkstra算法,算法的主要思想是按照路径长度递增的次序产生最短路径. 对于这个题目而言,需要注意的是: 1)赋值是双向的,比如说 ...

  2. 互联网IP路由的逐跳全局最优化原则-Dijkstra算法证明

    把周末写了一半的东西继续补齐了,实现了完美的一天. 我们知道的一个事实就是IP地址实在太多了,根本就不可能统一的管理起来,无论从数据平面还 是从控制/管理平面上说都是这样.所以,IP协议被设计出来就是 ...

  3. 图论算法》关于SPFA和Dijkstra算法的两三事

    本来我是想把这两个算法分开写描述的,但是SPFA其实就是Dijkstra的稀疏图优化,所以其实代码差不多,所以就放在一起写了. 因为SPFA是Dijkstra的优化,所以我想来讲讲Dijkstra. ...

  4. 最短路径——Dijkstra算法扩展(hdu2066,poj1062)

    *本文介绍了一些Dijkstra的变型例题,对Dijkstra算法不是很了解了可以移步上篇博客http://blog.csdn.net/sm9sun/article/details/53283791 ...

  5. Dijkstra算法 最短路径

    叙述 今天终于写到著名的贪心算法--Dijkstra算法了,内心有点激动. 小明的故事 Dijstra算法对很多人来说看起来比较困难,不是很能理解,其实也没什么啦! 比如,小明要自己驾车从科技大学去博 ...

  6. Heavy Transportation(Dijkstra算法)

    题目: Hugo Heavy很高兴.在Cargolifter项目破裂后,他现在可以扩展业务.但他需要一个聪明的人告诉他,他的客户是否真的有办法将他的巨型钢制起重机建造到需要所有街道都能承受重量的地方. ...

  7. Python、C/C++混编实现最短路径可视化—Dijkstra算法

    摘 要   本文讲述的是主要是运用C/C++语言Dijkstra算法来完成交通图的存储.图中任一顶点到其余任意一顶点间的最短路径问题,并利用Python中的复杂网络分析库Networkx来绘制有向图以 ...

  8. 一个人的旅行------Dijkstra

    虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景--草儿 ...

  9. [C] Dijkstra算法——通过边实现松弛

    Dijkstra算法--通过边实现松弛 本算法学习指定一个点(源点)到其余各个顶点的最短路径,也叫做单源最短路径例如求下图1号顶点到2,3,4,5,6号顶点的最短路径 这个时候你可能就要问了,为什么不 ...

最新文章

  1. SpringMVC搭建+实例
  2. Linux学习:第一天,
  3. c语言链表版百度云,链表详解(C语言版)
  4. SpringBoot集成ActiveMq消息队列实现即时和延迟处理
  5. jquery基本过滤选择器:first :last :not(.myclass) :even :odd :eq(1) :gt(5) :lt(1) :header :animated :focus
  6. model存数据_数据库内核杂谈 存储
  7. idea 安装 Vue 插件后没有新建Vue文件Vue component选项
  8. CANOe系列讲解 - CANoe发送UDS诊断帧
  9. java根据模板导出word poi-tl使用Word模板和数据创建Word文档
  10. android自定义壁纸制作,如何为Android制作自己的自定义壁纸 | MOS86
  11. 如何裁剪动图的边框?教你一键在线裁剪动图
  12. 关于银行卡四要素返回数据解析问题
  13. html怎么画表格边框,WEB 制作1px边框表格的几种方法
  14. 华为HCNA中vlan笔记
  15. CISCO 交换设备IOS 备份/恢复操作
  16. jquery - 公历转农历方法
  17. ITASCA PFC 2D3D DISCERETE ELEMENT MODELING
  18. Polestar美股上市:5.5万台交付如何支持得起超200亿美元估值
  19. 作为Senior Recruiter想跟大家聊聊求职,希望对大家有所帮助~
  20. xctf攻防世界 MISC高手进阶区 Ditf

热门文章

  1. 【postman学习笔记】
  2. Stylus—常见操作
  3. UEFI和EFI分别是什么|UEFI和EFI有什么区别
  4. MyBatis从使用到源码(上部:使用)
  5. 【每日一练】15—CSS实现好看的卡片效果
  6. FPGA学习笔记 -- 分频器
  7. jQuery正则表达式表单验证身份证号码
  8. 【UWP开发】uwp应用安装失败
  9. 路由导航守卫/路由拦截/导航守卫
  10. 自学Python:批量替换WORD文档里的关键词