题意:火车从一点开到另一点,轨道上有很多岔路口,每个路口都有好几个方向(火车能够选任意一个方向开),但是 默认的是 第一个指向的方向,所以如果要选择别的方向的话得 进行一次切换操作 ,给定一个起点一个终点 ,问最少进行几次 切换操作 能够 使 火车 完成这个历程 , 如果开不到,输出“-1”。

貌似很简单啊,直接把与第一个相连的距离置为0,后面相连的置为1

然后用最短路的方法直接搞.......最短距离就是开关的次数。

不要忘记还有输出-1;(果断忘了一次)

///////////////////////////////////////////////////////////////////////

  1. #include<stdio.h>
  2. #include<vector>
  3. #include<stack>
  4. #include<algorithm>
  5. #include<string.h>
  6. #include<math.h>
  7. using namespace std;
  8.  
  9. const int maxn = ;
  10. const int maxm = ;
  11. const int oo = 0xfffffff;
  12.  
  13. struct node
  14. {
  15.     int u, v, len, next;
  16. }e[maxn];
  17.  
  18. int dis[maxn], head[maxn];
  19. bool use[maxn];
  20.  
  21. void Add(int u, int v, int len, int k)
  22. {
  23.     e[k].= u;
  24.     e[k].= v;
  25.     e[k].len = len;
  26.     e[k].next = head[u];
  27.     head[u] = k;
  28. }
  29. void spfa(int s)
  30. {
  31.     stack<int> sta;
  32.     sta.push(s);
  33.  
  34.     while(sta.size())
  35.     {
  36.         int i = sta.top();sta.pop();
  37.         use[i] = false;
  38.  
  39.         for(int j=head[i]; j!=; j=e[j].next)
  40.         {
  41.             int u = e[j].u, v=e[j].v, len = e[j].len;
  42.  
  43.             if(dis[u]+len < dis[v])
  44.             {
  45.                 dis[v] = dis[u] + len;
  46.                 if(use[v] == false)
  47.                 {
  48.                     use[v] = true;
  49.                     sta.push(v);
  50.                 }
  51.             }
  52.         }
  53.     }
  54. }
  55.  
  56. int main()
  57. {
  58.     int N, A, B;
  59.  
  60.     while(scanf("%d%d%d", &N, &A, &B) != EOF)
  61.     {
  62.         int i, j, k=;
  63.  
  64.         memset(head, , sizeof(head));
  65.         for(i=; i<=N; i++)
  66.         {
  67.             int M, v;
  68.             dis[i] = oo;
  69.             scanf("%d%d", &M, &v);
  70.  
  71.             Add(i, v, , k++);
  72.  
  73.             for(j=; j<M; j++)
  74.             {
  75.                 scanf("%d", &v);
  76.                 Add(i, v, , k++);
  77.             }
  78.         }
  79.  
  80.         dis[A] = ;
  81.  
  82.         spfa(A);
  83.  
  84.         if(dis[B] == oo)
  85.             printf("-1\n");
  86.         else
  87.             printf("%d\n", dis[B]);
  88.     }
  89.  
  90.     return ;
  91. }

N - Tram - poj1847(简单最短路)的更多相关文章

  1. poj 1847 Tram【spfa最短路】

    Tram Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 12005   Accepted: 4365 Description ...

  2. hdu2112(HDU Today 简单最短路)

    Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD ...

  3. Til the Cows Come Home ( POJ 2387) (简单最短路 Dijkstra)

    problem Bessie is out in the field and wants to get back to the barn to get as much sleep as possibl ...

  4. POJ 1847 Tram --set实现最短路SPFA

    题意很好懂,但是不好下手.这里可以把每个点编个号(1-25),看做一个点,然后能够到达即为其两个点的编号之间有边,形成一幅图,然后求最短路的问题.并且pre数组记录前驱节点,print_path()方 ...

  5. Tram---poj1847(简单最短路)

    题目链接:http://poj.org/problem?id=1847 题意:给了N个交叉口,每个交叉口有自己能转到的交叉口. 注意这里:First number in the i-th line, ...

  6. hdu2722 简单最短路,处理好输入就行

    题意:       从左上角走到右下角,有的最短时间,每段路径的长度都是2520,每段上都有自己的限制速度,方向. 思路:      直接写就行了,就是个最短路,权值是2520/限制,输入的时候细心点 ...

  7. HDU 2544(简单最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=2544 /* 使用pair代替结构 */ #include <iostream> #include & ...

  8. HDU 1874(简单最短路) (大优化)

    优先队列那里用greater会报错 http://acm.hdu.edu.cn/showproblem.php?pid=1874 /* 使用pair代替结构 */ #include <iostr ...

  9. LightOJ 1321 - Sending Packets 简单最短路+期望

    http://www.lightoj.com/volume_showproblem.php?problem=1321 题意:每条边都有概率无法经过,但可以重新尝试,现给出成功率,传输次数和传输时间,求 ...

随机推荐

  1. Echarts使用随笔(2)-Echarts中mapType and data

    本文出处:http://blog.csdn.net/chenxiaodan_danny/article/details/39081071  series : [                {   ...

  2. UILabel的高度自适应

    _content = [UILabel new]; _content.text = @"日落时分,沏上一杯山茶,听一曲意境空远的<禅>,心神随此天籁,沉溺于玄妙的幻境里.仿佛我就 ...

  3. OpenCV中Mat的详解

    每次碰到Mat都得反复查具体的用法,网上的基础讲解不多,难得看到一篇,赶快转来收藏~ 原文地址:http://www.opencvchina.com/thread-1039-1-1.html 目标 我 ...

  4. OC文件操作(2)

    NSFileManager 文件管理器完成文件的创建.移动.拷贝等管理操作 1.查询文件和目录  OC中查询路径下的目录主要分为浅度遍历和深度遍历.  浅度遍历  NSFileManager * ma ...

  5. confluence的权限管理

    上一篇解讲如何破解,安装confluence5.8.10,这次主要是看权限管理的实现.因为公司对知识的管理不仅是简单的分享,还要求不同权限的人看到不同的内容,所以在一开始就需要对权限这一块有所了解,以 ...

  6. Linux内存点滴:用户进程内存空间

    原文出处:PerfGeeks 经常使用top命令了解进程信息,其中包括内存方面的信息.命令top帮助文档是这么解释各个字段的.VIRT , Virtual Image (kb)RES, Residen ...

  7. eclipse中show whitespace characters显示代码空格,TAB,回车 导致代码乱恶心

    Eclipse中show whitespace characters显示回车.空格符. 取消此功能的第二种方式:

  8. Android 即时语音聊天工具 开发

    使用融云SDK 1. 功能需求分析 1.1 核心功能需求: * 即时通讯 * 文字聊天 * 语音聊天 1.2 辅助功能需求: * 注册.登录 * 好友添加功能 * 好友关系管理 2. 融云即时通讯平台 ...

  9. Android app自动化测试之Python+Appium环境搭建

    1.安装JDK (1)JDK安装时会有两次,一次是jdk,第二次是jre. (2)环境变量配置: 添加JAVA_HOME变量, 值:Jdk的安装路径 添加CLASSPATH变量,值: .;%JAVA_ ...

  10. windows server 2012 iis8.0部署mvc报错

    一开始以为需要在服务器装mvc在很多论坛找过也问了朋友都说需要装mvc,经过两天研究是不需要装mvc的只需要在项目的bin文件夹下放入下面三个dll. 未能加载文件或程序集“System.Web.Ht ...