NYOJ 1238 最少换乘
原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1238
最少换乘
- 描述
-
欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行。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
#include <stdio.h>
#include <string.h>
#include <utility>
#include <queue>
#include <algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAX_V = 510;
int M,V; //定义行数,和顶点数 typedef pair<int, int > P; //first为最短次数,second为顶点序号
vector<int > G[MAX_V]; //G[i]存放的是第i个点到 其他点的序号和权值
int d[MAX_V]; //d[i]存放的是指定节点s到i的最短距离 void dijkstra_pri(int s){//通过指定greater<P>参数,堆按照first从小到大的顺序取出值priority_queue<P, vector<P>, greater<P> > que;fill(d, d+V+1, INF);d[s] = 0;que.push(P(0, s)); //把第一个点权值和序号存入 while(!que.empty()){P p = que.top(); que.pop();int v = p.second;if(d[v] < p.first) continue; //除去存入的相同序号不同权值for(int i = 0;i < G[v].size();i ++){if(d[G[v][i]] > d[v] + 1){d[G[v][i]] = d[v] + 1;que.push(P(d[G[v][i]], G[v][i]));//printf("(%d,%d)\n",d[G[v][i]], G[v][i]);} }}
}
int main(){int K, i, j, len, x, t;vector<int > vec;char s[MAX_V * 5];scanf("%d", &K);while(K --){scanf("%d%d", &M, &V);getchar();while(M --){gets(s);len = strlen(s);s[len] = ' '; //方便读取最后一个顶点 for(x=i=0;i <= len;i ++){if(s[i] != ' '){x = x * 10 + s[i] - '0';}else{// printf("%d.\n", x);vec.push_back(x); //将顶点存入容器中 x = 0;}}for(i = 0;i < vec.size();i ++){for(j = i+1;j < vec.size();j ++){G[vec[i]].push_back(vec[j]);//printf("%d->%d ", vec[i], vec[j] );}//printf("\n");}vec.clear(); //清空容器,以便下一次使用 }dijkstra_pri(1);if(d[V] < INF){printf("%d\n", d[V] - 1);}else{printf("NO\n");}while(V--){ //清空容器,以便下一次使用 G[V+1].clear();}}return 0;
}
NYOJ 1238 最少换乘相关推荐
- nyoj 1238 最少换乘(spfa)
描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. 年轻人旅游不怕辛苦,不怕劳累,只要费用低就行.但Dr. Kong年过半百,他希望乘坐 ...
- 1049-飞机最少换乘次数问题
描述 设有n个城市,编号为0-n-1,m条单向航线的起点和终点由输入提供,寻找一条换乘次数最少的线路方案. 输入 第一行为三个整数n.m.v,表示城市数.单向航线数和起点城市.以下m行每行两个整数,表 ...
- 最少换乘(最短路+恶心的输入)acm寒假集训日记22/1/3 or 22/1/4
题目如下: AC代码如下: #include<iostream> #include<cstring> #include<cstdio> using namespac ...
- LeetCode 815. 公交路线(最少换乘,BFS)
1. 题目 我们有一系列公交路线.每一条路线 routes[i] 上都有一辆公交车在上面循环行驶. 例如,有一条路线 routes[0] = [1, 5, 7],表示第一辆 (下标为0) 公交车会一直 ...
- nyoj1238 最少换乘 最短路
先上链接http://acm.nyist.net/JudgeOnline/problem.php?pid=1238 基本没难点,最基础的迪杰斯特拉.输入用字符串处理gets()和getline()都可 ...
- NYOJ 46 最少乘法次数
比較水的一道题.. .. 时间限制:1000 ms | 内存限制:65535 KB难度:3 描写叙述 给你一个非零整数.让你求这个数的n次方,每次相乘的结果能够在后面使用,求至少须要多少次乘.如2 ...
- 南京邮电大学数据结构实验三(图的基本运算及飞机换乘次数最少问题)
文章目录 实验一.图的基本运算 1.邻接矩阵表示 (1)验证基本运算 (2)图的深度和宽度优先遍历(邻接矩阵) 2.邻接表表示 (1)验证基本运算 (2)图的深度和宽度优先遍历(邻接表) 实验二.飞机 ...
- 南邮数据结构实验三---图的基本运算及飞机换乘次数最少问题
一. 实验目的和要求 1.掌握在图的邻接矩阵和邻接表存储结构实现图的基本运算的算法.学习使用图算法解决应用问题的方法. (1). 验证教材中关于在邻接矩阵和邻接表两种不同存储结构上实现图的基本运算的算 ...
- 城市公交站点及换乘方案设计
城市公交站点及换乘方案设计 设计要求 城市公共交通站点,站点之间的道路,及道路长度实际构成数学意义上的无向加权图.现请设计实现一个算法,求任意两站点间最短路径距离且输出该最短路径上的每个站点,然后给一 ...
最新文章
- python爬虫新手项目-33个Python爬虫项目实战(推荐)
- 保留字(reserved field)是什么意思?
- 扩展--使用队列来优化递归操作完成文件下载
- 上海1.3万座玻璃幕墙建筑“一网统管”
- python中字典的find_python中的字典
- mysql不可重复读是锁的表吗,Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)...
- LeetCode 939. Minimum Area Rectangle (最小面积矩形)
- 理解LINQ预编译查询(Compiled LINQ)
- 阿里云服务器docker安装网心云容器魔方
- 微信跳转php代码,微信打开域名跳转浏览器纯PHP代码已适配安卓和IOS系统
- 计算机中班音乐,幼儿园中班音乐活动课件大全【三篇】
- PHP调用API接口
- php7的新特性有哪些,php7新特性有哪些?
- AMCL代码详解(五)根据激光观测更新粒子权重
- 局域网测速iperf3
- banner图失真解决方案
- Windows server 2012镜像下载
- 易基因 | 微量样本DNA甲基化测序分析怎么做?25.617分文章告诉你
- 李永新 和 马士兵 结合
- php 数组转为字符,php 数组字符串如何转换为字符串