描述
欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行。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
来源
第八届河南省程序设计大赛

思路:把同一公交线路上的站点之间的距离置为1建边即可,最后得出的d[n]-1就是所求的答案(具体详见代码)

代码:

#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;#define maxn 505
const int inf=0x3f3f3f3f;
struct node
{int v,w,next;
} G[maxn*2];
char s[maxn];
int d[maxn],a[maxn],first[maxn];
bool inq[maxn];
int n,tot;void spfa()
{for(int i=1; i<=n; ++i){d[i]=inf;inq[i]=false;}queue<int>q;q.push(1),inq[1]=true,d[1]=0;while(!q.empty()){int st=q.front();q.pop();inq[st]=false;for(int i=first[st]; i!=-1; i=G[i].next){int v=G[i].v,w=G[i].w;if(d[v]>d[st]+w){d[v]=d[st]+w;if(!inq[v]){inq[v]=true;q.push(v);}}}}
}void add_egde(int u,int v,int w)
{G[tot].v=v,G[tot].w=w;G[tot].next=first[u];first[u]=tot++;
}int main()
{int t,m;scanf("%d",&t);while(t--){memset(first,-1,sizeof(first));scanf("%d %d",&m,&n);getchar();int ps=0,tmp;tot=0;while(m){fgets(s,maxn,stdin);int len=strlen(s);for(int i=0; i<len; ++i){if(s[i]>='0'&&s[i]<='9'){tmp=0;while(s[i]>='0'&&s[i]<='9')tmp=tmp*10+s[i]-'0',++i;}a[ps++]=tmp;}for(int i=0; i<ps; ++i)for(int j=i+1; j<ps; ++j)add_egde(a[i],a[j],1);--m,ps=0;}spfa();if(d[n]==inf)printf("NO\n");elseprintf("%d\n",d[n]-1);}return 0;
}

总结:这道题做了三四天,难受坏了。。。
一个是格式控制是一个坑点,只能够整行输入,有些空格后面竟然还是空格。。。
二是建边问题,我想到的是让同一路线上的站点之间的距离为0,不同线路之间的为1,结果就是建不对边。。。

原来让同一公交线路上的站点之间的距离为1的话,换乘次数就可以加起来了,而我那种想法根本加不起来。。。姜还是老的辣啊(熟能生巧)!

nyoj 1238 最少换乘(spfa)相关推荐

  1. NYOJ 1238 最少换乘

    原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1238 最少换乘 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 ...

  2. 1049-飞机最少换乘次数问题

    描述 设有n个城市,编号为0-n-1,m条单向航线的起点和终点由输入提供,寻找一条换乘次数最少的线路方案. 输入 第一行为三个整数n.m.v,表示城市数.单向航线数和起点城市.以下m行每行两个整数,表 ...

  3. 最少换乘(最短路+恶心的输入)acm寒假集训日记22/1/3 or 22/1/4

    题目如下: AC代码如下: #include<iostream> #include<cstring> #include<cstdio> using namespac ...

  4. LeetCode 815. 公交路线(最少换乘,BFS)

    1. 题目 我们有一系列公交路线.每一条路线 routes[i] 上都有一辆公交车在上面循环行驶. 例如,有一条路线 routes[0] = [1, 5, 7],表示第一辆 (下标为0) 公交车会一直 ...

  5. nyoj1238 最少换乘 最短路

    先上链接http://acm.nyist.net/JudgeOnline/problem.php?pid=1238 基本没难点,最基础的迪杰斯特拉.输入用字符串处理gets()和getline()都可 ...

  6. NYOJ 46 最少乘法次数

    比較水的一道题.. .. 时间限制:1000 ms  |  内存限制:65535 KB难度:3 描写叙述 给你一个非零整数.让你求这个数的n次方,每次相乘的结果能够在后面使用,求至少须要多少次乘.如2 ...

  7. 南京邮电大学数据结构实验三(图的基本运算及飞机换乘次数最少问题)

    文章目录 实验一.图的基本运算 1.邻接矩阵表示 (1)验证基本运算 (2)图的深度和宽度优先遍历(邻接矩阵) 2.邻接表表示 (1)验证基本运算 (2)图的深度和宽度优先遍历(邻接表) 实验二.飞机 ...

  8. 南邮数据结构实验三---图的基本运算及飞机换乘次数最少问题

    一. 实验目的和要求 1.掌握在图的邻接矩阵和邻接表存储结构实现图的基本运算的算法.学习使用图算法解决应用问题的方法. (1). 验证教材中关于在邻接矩阵和邻接表两种不同存储结构上实现图的基本运算的算 ...

  9. 城市公交站点及换乘方案设计

    城市公交站点及换乘方案设计 设计要求 城市公共交通站点,站点之间的道路,及道路长度实际构成数学意义上的无向加权图.现请设计实现一个算法,求任意两站点间最短路径距离且输出该最短路径上的每个站点,然后给一 ...

最新文章

  1. Facebook将React的许可改为MIT
  2. 获取运行中的TeamViewer的账号和密码--中文版
  3. 我在定制office 2007时遇到的问题
  4. PKI/CA (3)CA功能细分
  5. Nginx映射本地静态资源时,浏览器提示跨域问题解决
  6. Response.Redirect 产生的“正在中止线程”错误
  7. 循环 Request.ServerVariables
  8. mysql关于学校的专业院系_大学里分的院校和分专业系有什么不同
  9. Oracle基础函数
  10. 数组输出c语言程序,C语言输出数组的三种方法
  11. linux文件名格式,ASM文件名格式
  12. 西游降魔之东去的西游
  13. 非常完美的PDF转换成Word转换器完全免费破解版(亲测好用)
  14. *CF1132D.Stressful Training(二分+队列+贪心)
  15. 码分多址(CDMA),码片序列简单理解
  16. “悟空遥控”商业模式拆解及投资建议
  17. Java抽象类和接口使用_Java 抽象类和接口
  18. 给定字符串A和B,输出A和B中的最大公共子串。
  19. html写的圣诞节贺卡
  20. 固定资产设备管理系统(移动+PC)

热门文章

  1. lipo otool 动态库、静态库的生成
  2. excel数据透视表数据排序及excel表格转成word表
  3. javascript(JS) 0基础快速入门 (二)(this指向问题)
  4. 启动Tomcat服务器报错
  5. SpringMVC——过滤器
  6. MySQL 推荐书目
  7. 如何操作 Office Open XML 格式文档(转)
  8. c语言用位运算将一个数清零,C语言学习笔记_位运算
  9. Pandas 数据预处理
  10. AI中的变形,扭曲和变化,栅格化命令,裁剪标记,路径,路径查找器,转化为形状