Description

欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行。Dr. Kong决定利用暑假好好游览一番。。

年轻人旅游不怕辛苦,不怕劳累,只要费用低就行。但Dr. Kong年过半百,他希望乘坐BUS从住的宾馆到想去游览的景点,期间尽可量地少换乘车。

Dr. Kon买了一张旅游地图。他发现,市政部门为了方便游客,在各个旅游景点及宾馆,饭店等地方都设置了一些公交站并开通了一些单程线路。每条单程线路从某个公交站出发,依次途经若干个站,最终到达终点站。

但遗憾的是,从他住的宾馆所在站出发,有的景点可以直达,有的景点不能直达,则他可能要先乘某路BUS坐上几站,再下来换乘同一站的另一路BUS, 这样须经过几次换乘后才能到达要去的景点。

为了方便,假设对该城的所有公交站用1,2,……,N编号。Dr. Kong所在位置的编号为1,他将要去的景点编号为N。

请你帮助Dr. Kong寻找一个最优乘车方案,从住处到景点,中间换车的次数最少。

Input

第一行:     K              表示有多少组测试数据。(2≤k≤8)

接下来对每组测试数据:

第1行:       M  N        表示有M条单程公交线路,共有N站。(1<=M<=100 1<N<=500)

第2~M+1行: 每行描述一路公交线路信息,从左至右按运行顺序依次给出了该线路上的所有站号,相邻两个站号之间用一个空格隔开。

Output

对于每组测试数据,输出一行,如果无法乘坐任何线路从住处到达景点,则输出"N0",否则输出最少换车次数,输出0表示不需换车可以直达。

Sample Input

  1. 2
  2. 3 7
  3. 6 7
  4. 4 7 3 6
  5. 2 1 3 5
  6. 2 6
  7. 1 3 5
  8. 2 6 4 3

Sample Output

  1. 2
  2. NO

Source

第八届河南省赛

题解:    处理好每站的联系,把他们储存到图中是解题的关键.  之后就是简单的Dijkstra算法   求最短路...

代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <math.h>
  4. #include <limits.h>
  5. #include <algorithm>
  6. #include <iostream>
  7. #include <ctype.h>
  8. #include <iomanip>
  9. #include <queue>
  10. #include <stdlib.h>
  11. using namespace std;
  12.  
  13. #define INF 0xffffff
  14. #define N 550
  15. int m,n;
  16. int map[N][N];
  17.  
  18. void Dijkstra()
  19. {
  20. int i,j,u,sum=;
  21. int book[N],dis[N],min;
  22. memset(book,,sizeof(book));//book数组初始化
  23. //初始化dis数组,这里是1号顶点到其余各个顶点的初始路程
  24. for(i=;i<=n;i++)
  25. dis[i]=map[][i];
  26. book[]=;
  27.  
  28. //Dijkstra算法核心语句
  29. for(i=;i<=n-;i++)
  30. {
  31. //找到离1号顶点最近的顶点
  32. min=INF;
  33. for(j=;j<=n;j++)
  34. {
  35. if(book[j]== && dis[j]<min)
  36. {
  37. min=dis[j];
  38. u=j;
  39. }
  40. }
  41. book[u]=;
  42. for(j=;j<=n;j++)
  43. {
  44. if(map[u][j]<INF)
  45. {
  46. if(dis[j]>dis[u]+map[u][j])
  47. dis[j]=dis[u]+map[u][j];
  48. }
  49. }
  50. }
  51. if(dis[n]>=INF)
  52. printf("NO\n");
  53. else
  54. printf("%d\n",dis[n]-);
  55. }
  56.  
  57. int main()
  58. {
  59. int t;
  60. scanf("%d",&t);
  61. while(t--){
  62. int i,j,k=,v;
  63. char s[];
  64. int du[N];
  65. scanf("%d%d",&m,&n);
  66. for(i=;i<=N;i++){
  67. for(j=;j<=N;j++){
  68. if(i==j)
  69. map[i][j]=;
  70. else
  71. map[i][j]=INF;
  72. }
  73. }
  74. getchar();
  75. for(i=;i<m;i++)//建图
  76. {
  77. k=;
  78. gets(s);
  79. for(j=;j<strlen(s);j++)
  80. {
  81. if(s[j]!=' ')
  82. {
  83. int sum=;
  84. while(s[j]!=' '&&j<strlen(s))
  85. {
  86. sum=sum*+(s[j]-'');j++;//有可能是两位或更多位的数
  87. }
  88. du[k++]=sum;
  89. }
  90. }
  91. for(j=;j<k;j++)
  92. {
  93. for(v=j+;v<k;v++)
  94. {
  95. map[du[j]][du[v]]=;
  96. }
  97. }
  98. }
  99. Dijkstra();
  100. }
  101. }
 

最少换乘(Dijkstra)的更多相关文章

  1. zzuoj 10408: C.最少换乘【最短路dijkstra】

    10408: C.最少换乘 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 31  Solved: 8[Submit][Status][Web Board ...

  2. 第八届河南省赛C.最少换乘(最短路建图)

    C.最少换乘 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 94  Solved: 25 [Submit][Status][Web Board] De ...

  3. HihoCoder1643 : 最少换乘([Offer收割]编程练习赛37)(bfs)

    描述 小Ho居住的城市有N条公交车线路,其中第i条线路上有Ki个车站. 某些线路之间会有公共的车站,小Ho可以在这些车站从一条线路换乘到另一条线路. 现在给定N条公交车线路以及两个车站S和E,你能帮助 ...

  4. nyoj 1238 最少换乘 (河南省第八届acm程序设计大赛)

    题目1238 题目信息 执行结果 本题排行 pid=1238" style="text-decoration:none; color:rgb(55,119,188)"&g ...

  5. nyoj 1238 最少换乘(dijkstra)

    描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. 年轻人旅游不怕辛苦,不怕劳累,只要费用低就行.但Dr. Kong年过半百,他希望乘坐 ...

  6. NYOJ1238 最小换乘 (dijkstra)

    最少换乘 时间限制:2000 ms  |  内存限制:65535 KB 难度:3   描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. ...

  7. Prim算法和Dijkstra算法的异同

    Prim算法和Dijkstra算法的异同 之前一直觉得Prim和Dijkstra很相似,但是没有仔细对比: 今天看了下,主要有以下几点: 1: Prim是计算最小生成树的算法,比如为N个村庄修路,怎么 ...

  8. C#算法知识点记录

    针对算法的知识点进行记录 简易桶排序 首先看一个简易桶排序,有一串数字,进行从大到小排列.数字间隔不大,使用一维数组来当作桶,进行插入排序. static void Main(string[] arg ...

  9. JML契约式设计——第三单元学习小结

    一.前言 本单元作业都是关于JML(Java Modeling Language),JML是一种契约式设计(Design by Contract)的语言,契约式设计的主要目的是希望程序员能够在设计程序 ...

随机推荐

  1. C和指针 (pointers on C)——第十四章:预处理器

    第十四章 预处理器 我跳过了先进的指针主题的章节. 太多的技巧,太学科不适合今天的我.但我真的读,读懂.假设谁读了私下能够交流一下.有的小技巧还是非常有意思. 预处理器这一章的内容.大家肯定都用过.什 ...

  2. 几款开源ESB总线的比较(转)

    现有的开源ESB总线中,自从2003年第一个开源总线Mule出现后,现在已经是百花争鸣的景象了.现在我就对现有的各种开源ESB总线依据性能.可扩展性.资料文档完整程度以及整合难易程度等方面展开. CX ...

  3. 国内外MD5在线解密网站

    -http://www.cmd5.com/english.aspx (457,354,352,282) - http://www.md5crack.com - http://www.hashcheck ...

  4. cocospods 卡在 Analyzing dependencies

    參考链接:http://www.cocoachina.com/bbs/read.php? tid=193398 关于pod stetup的详解在这里.对于初次使用CocoaPods的同学,即使你不使用 ...

  5. android--jenkins+gradle+android自动化构建apk步骤(转)

    第一步,安装jenkins,这个网上教程挺多的. 第二步,下载并配置gradle.下载地址http://www.gradle.org/ 解压gradle至某路径下,如/usr/local/lib/gr ...

  6. 复制(5)——事务复制中的发布者(Publisher)

    发布者是所有被复制(replicated)的数据的集合.每个发布者可以有多个发布(publication),每个发布项包含多个项目(articles),但是这些发布必须处于一个单一的数据库中,而每个项 ...

  7. 使用shell/python获取hostname/fqdn释疑(转)

    一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Li ...

  8. SQL Server 2008性能故障排查(二)——CPU

    原文:SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排好 ...

  9. iOS kvc

    kvc在我的脑海里用来更改属性的实例变量值. 今天,他们遇到了kvc第二次去学习它,在网上看了很多博客,这似乎不符合我的口味,为了提取一些以下的.总结自己的. http://www.cnblogs.c ...

  10. Android文本Flood it游戏源代码

    flood_it 流行的Flood it游戏的Android版 游戏玩法: 按下屏幕下方的颜色button,左上角的色块就会变颜色.仅仅要把整片色块变成同色就赢了. 效果图 <ignore_js ...