最少换乘 第八届

最少换乘

时间限制:2000 ms  |  内存限制:65535 KB

难度:3

描述

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

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

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

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

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

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

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

接下来对每组测试数据:

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

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

输出
对于每组测试数据,输出一行,如果无法乘坐任何线路从住处到达景点,则输出"N0",否则输出最少换车次数,输出0表示不需换车可以直达。
样例输入
2
3 7
6 7
4 7 3 6
2 1 3 5
2 6
1 3 5
2 6 4 3
样例输出
2
NO
来源
第八届河南省程序设计大赛

AC代码:

Dijkstra最短路算法就可以了

#include<iostream>
#include<cstdio>
#include<cstring>
#define n 550
#define INF 0xFFFFFFF
using namespace std;
int  s[n][n],dis[n],book[n];
int K,M,N;
int main()
{
	int i,j,k,t;
	char c[2*n+10];
	int a[n];
	int min,sum;
	while(cin>>K)
	while(K--){
		scanf("%d %d",&M,&N);
		for(i=1;i<=N;i++)
		for(j=1;j<=N;j++){
			if(i==j)s[i][j]=0;
			else s[i][j]=INF;
		}
		getchar();
		for(i=0;i<M;i++)
		{
			t=0;
			gets(c);
			int p=strlen(c);
			for(j=0;j<p;j++){
                if(c[j]!=' '){
                    sum=0;
                    while(c[j]!=' '&&j<p){
                        sum=sum*10+(c[j]-'0');
                        j++;
                    }
                    a[t++]=sum;
                }
            }
			for(j=0;j<t;j++)
			for(k=j+1;k<t;k++)
			s[a[j]][a[k]]=1;
		}
		for(i=1;i<=N;i++)
        {
            dis[i]=s[1][i];
            book[i]=0;
        }
        book[1]=1;
        for(i=1;i<=N;i++)
        {
            min=INF;
            for(j=1;j<=N;j++)
            if(!book[j] && dis[j]<min){
                k=j;
                min=dis[j];
            }
            book[k]=1;
            for(j=1;j<=N;j++)
            if(!book[j] && dis[k]+s[k][j]<dis[j])
            dis[j]=dis[k]+s[k][j];
        }
        if(dis[N]==INF)printf("NO\n");
        else printf("%d\n",dis[N]-1);
	}
	return 0;
}
时间: 2024-10-08 16:10:07

最少换乘 第八届的相关文章

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买了一

最少换乘

Description 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.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 · 设计复审 (和同事审核设计