最少换乘

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

2
3 7
6 7
4 7 3 6
2 1 3 5
2 6
1 3 5
2 6 4 3

Sample Output

2
NO

最短路变形   建个图用迪杰斯特拉 算法 (注意下  有向图)
 1 #include <cstdio>
 2 #include <queue>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <cstdlib>
 6 #include <iostream>
 7 #include <algorithm>
 8 using namespace std;
 9 const int oo = 0x3f3f3f3f;
10 const int N = 555;
11 const int M = 6000;
12 typedef long long LL;
13 int maps[N][N], vis[N], dis[N], n, m, num[N];
14 char str[M];
15 void init()
16 {
17     for(int i = 0; i < 555; i++)
18     {
19         for(int j = 0; j < 555; j++)
20             maps[i][j] = oo;
21         maps[i][i] = 0;
22     }
23     memset(vis, 0, sizeof(vis));
24 }
25 void prime()
26 {
27     int i, j, index, mini;
28     for(i = 1; i <= n; i++)
29         dis[i] = maps[1][i];
30     vis[1] = 1;
31     for(i = 1; i < n; i++)
32     {
33         mini = oo;index = 0;
34         for(j = 1; j <= n; j++)
35         {
36             if(!vis[j] && dis[j] < mini)
37             {
38                 mini = dis[j];
39                 index = j;
40             }
41         }
42         vis[index] = 1;
43         for(j = 1; j <= n; j++)
44         {
45             if(!vis[j] && dis[j] > maps[index][j] + dis[index])
46                 dis[j] = dis[index] + maps[index][j];
47         }
48     }
49 }
50 int main()
51 {
52     int T, k, i, j, ans;
53     scanf("%d", &T);
54     while(T--)
55     {
56         scanf("%d %d ", &m, &n);
57         init();
58         while(m--)
59         {
60            gets(str);
61            k = 0;
62            for(i = 0; i < strlen(str); i++)
63            {
64                if(str[i] != ‘ ‘)
65                {
66                    ans = 0;
67                    while(str[i] != ‘ ‘ && i < strlen(str))
68                    {
69                        ans = ans*10 + (str[i]-‘0‘);
70                        i++;
71                    }
72                    num[k++] = ans;
73                }
74                //else i++;
75            }
76            for(i = 0; i < k-1; i++)
77            {
78                for(j = i+1; j < k; j++)
79                 maps[num[i]][num[j]] = 1;
80            }
81         }
82         prime();
83         ans = dis[n];
84         if(ans != oo) printf("%d\n", ans-1);
85         else printf("NO\n");
86     }
87     return 0;
88 }
				
时间: 2025-01-15 05:35:09

最少换乘的相关文章

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

题目1238 题目信息 运行结果 本题排行 讨论区 最少换乘 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. 年轻人旅游不怕辛苦,不怕劳累,只要费用低就行.但Dr. Kong年过半百,他希望乘坐BUS从住的宾馆到想去游览的景点,期间尽可量地少换乘车. Dr. Kon买了一张旅游地图.他发现,市政部门为了方便游客,在各个旅游景点及宾馆,饭店等地方都设置了一些公

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

10408: C.最少换乘 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 31  Solved: 8[Submit][Status][Web Board] Description 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. 年轻人旅游不怕辛苦,不怕劳累,只要费用低就行.但Dr. Kong年过半百,他希望乘坐BUS从住的宾馆到想去游览的景点,期间尽可量地少换乘车. Dr. Kon买了一

最少换乘 第八届

最少换乘 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. 年轻人旅游不怕辛苦,不怕劳累,只要费用低就行.但Dr. Kong年过半百,他希望乘坐BUS从住的宾馆到想去游览的景点,期间尽可量地少换乘车. Dr. Kon买了一张旅游地图.他发现,市政部门为了方便游客,在各个旅游景点及宾馆,饭店等地方都设置了一些公交站并开通了一些单程线路.每条单程线路从某个公交站出

最少换乘 之简化版

将题目中要的 需要换的车数   换成  需要走的站数 下面附上 本人的 渣渣代码 1 /*主要是因为 这个题按照要求写不出来 就先写了个这 等等补上 完整的*/ 2 // 我的思路就是 用 vector去构建出来一个 有向图 然后开始广搜 3 #include<stdio.h> 4 #include<vector> 5 #include<queue> 6 #include<string.h> 7 using namespace std; 8 struct s

zzuoj10408--最少换乘(***最短路***)

10408: C.最少换乘 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 38  Solved: 10[Submit][Status][Web Board] Description 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. 年轻人旅游不怕辛苦,不怕劳累,只要费用低就行.但Dr. Kong年过半百,他希望乘坐BUS从住的宾馆到想去游览的景点,期间尽可量地少换乘车. Dr. Kon买了

数据结构实验3(飞机最少环城次数问题)

使用图算法解决应用问题: 设有n个城市, 编号为0 ~ n - 1, m条航线的起点和终点由用户输入提供. 寻找一条换乘次数最少的线路方案. 使用有向图表示城市间的航线, 只要两城市之间有航班, 则图中这两点间存在一条权为1的边. 用Dijkstra算法实现求最少换乘次数. 在MGraph类中增加Choose函数以及Dijkstra函数即可. 实现代码: #include "iostream" #include "cstdio" #include "cst

结对项目博客

组员:14061216 陈鸿超 1406        程富瑞 一.结对编程分析 照片: 结对编程的优缺点: 优点: 毫无疑问,两个人在一起解决一个问题想法更多.比如这次作业站点坐标的确定,之前一个人的时候,想法是手输或者写个算法自动计算,当然这个算法就会很难,不一定做的出来.而两个人在一起商讨时,他突然找到了一张北京站点的经纬表,看到这个我就想到了找一个站点做为中心点(0,0),再找两个最远站点,这样根据他们三个就可以换算出所有站点的坐标.很准确,而且最重要的是简单多了. 分配好任务之后,每个

Android应用中使用百度地图API之POI(三)

先看执行后的图吧: POI(Point of Interest).中文能够翻译为"兴趣点".在地理信息系统中.一个POI能够是一栋房子.一个商铺.一个邮筒.一个公交站等  具体:http://developer.baidu.com/map/sdkandev-4.htm 主要应用 MKSearch 类: com.baidu.mapapi.search 类 MKSearch java.lang.Object com.baidu.mapapi.search.MKSearch public c

个人项目-地铁出行线路规划程序

PSP表格 PSP 2.1 Personal Software Process Stages Planning Time(H) Used Time(H) Planning 计划 0.5 0.25 · Estimate · 估计这个任务需要多少时间 0.5 0.25 Development 开发 25.5 45.9 · Analysis · 需求分析 (包括学习新技术) 10 13 · Design Spec · 生成设计文档 2 3 · Design Review · 设计复审 (和同事审核设计