最优乘车

最优乘车

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 18   Accepted Submission(s) : 6

Problem Description

H城是一个旅游胜地,每年都有成千上万的人前来观光。为方便游客,巴士公司在各个旅游景点及宾馆、饭店等地都设置了巴士站并开通了一些单程巴士线路。每条单程巴士线路从某个巴士站出发,依次途径若干个巴士站,最后到达终点巴士站。

一名旅客最近到H城旅游,他很想其S公园游玩,但如果从他所在的饭店没有一路巴士可以直接到达S公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士,这样换乘几次后到达S公园。

现在用整数1,2,...N给H城的所有的巴士站编号,约定这名旅客所在饭店的巴士站编号为1,S公园巴士站的编号为N。

写一个程序,帮助这名旅客寻找一个最优乘车方案,使他在从饭店乘车到S公园的过程中换车的次数最少。

Input

有多组输入数据,每组数据的第一行有两个数字M和N(1<=M<=100 1<N<=500),表示开通了M条单程巴士线路,总共有N个车站。从第2行到第M+1行依次给出了第1条到第M条巴士线路的信息。其中第i+1行给出的是第i条巴士线路的信息,从左至右按运行顺序依次给出了该线路上的所有站号,相邻两个站号之间用一个空格隔开。

Output

对于每组数据输出只有一行。如果无法乘巴士从饭店到达S公园,则输出“NO”,否则输出你的程序所找到的最少换车次数,换车次数为0,表示不需换车即可到达。

Sample Input

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

Sample Output

2

主要的还是对数据的处理,一个巴士线路上的站都只要乘一次就到了,那么我们建立图,如果i站点和j站点同时出现在一个巴士线路上就连一条边,他们之间的权值为1.然后用最短路处理,dijkstra和floyed都能处理

#include <iostream>

#include <sstream>

#include <string>

#include <stdio.h>

#define MAX 100000099

#define Q 501

using namespace std;

void dijkstra(int);

int num[Q], a[Q][Q], dist[Q];

int main()

{

int M, N;

while(cin >> M >> N)

{

for(int i = 1; i <= N; i++)

{

for(int j = 1; j <= N; j++)

a[i][j]=MAX;

dist[i]=MAX;

}

getchar();

int len, x;

string str;

for (int i = 0; i < M; i++)

{

getline(cin,str);

stringstream in(str);

len = 0;

while(in >> x)  num[++len] = x;

for (int j = 1; j < len; j++)

for (int k = j+1; k <= len; k++)

a[num[j]][num[k]] = 1;

}

/*for (int i = 0; i <= N; i++)

{

for (int j = 0; j <= N; j++)

cout << a[i][j] << "\t";

cout << endl;

}*/

dijkstra(N);

if(dist[N] == MAX)  cout << "NO" << endl;

else cout << dist[N]-1 << endl;

}

}

void dijkstra(int n)

{

//s[N]为标记

int s[Q],newdist,i;

for(i=1;i<=n;i++)

{

dist[i]=a[1][i];

s[i]=0;

}

dist[1]=0;

s[1]=1;

for(i=2;i<=n;i++)

{

//找出离初始位置最小的点

int j,tem=MAX;

int u=1;

for(j=2;j<=n;j++)

if(!s[j]&&dist[j]<tem)

{

u=j;

tem=dist[j];

}

s[u]=1;

//更新dist[N]的值

for(j=2;j<=n;j++)

{

if(!s[j]&&a[u][j]<MAX)

{

newdist=dist[u]+a[u][j];

if(newdist<dist[j])

dist[j]=newdist;

}

}

}

}

最优乘车

时间: 2024-10-12 01:06:18

最优乘车的相关文章

【NOI97】最优乘车

Description H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站. 一名旅客最近到H城旅游,他很想去S公园游玩,但如果从他所在的饭店没有一路巴士可以直接到达S公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士, 这样换乘几次后到达S公园. 现在用整数1,2,…N 给H城的所有的巴士站编号,约定这名旅客所在饭

noi 1997 最优乘车

H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站. 一名旅客最近到H城旅游,他很想去S公园游玩,但如果从他所在的饭店没有一路已士可以直接到达S公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士, 这样换乘几次后到达S公园. 现在用整数1,2,…N 给H城的所有的巴士站编号,约定这名旅客所在饭店的巴士站编号为1…S公

HN0I2000最优乘车 (最短路变形)

HN0I2000最优乘车 (最短路变形) [试题]为了简化城市公共汽车收费系统,某城市决定对大部分的公共汽车都采用一票制,但由于某些公共汽车所经过的停车站太多和路途太长,就采用两票或多票制.经过这种票制改革后,人们坐公共汽车从一个站到另一个站时,就不得不选择一个好的乘车方案,以使他们的乘车费用最低. 为了方便于求出最佳的乘车方案,我们假设: l  采用一票制的公共汽车,无论从哪个站上车到那个站下车,乘该公共汽车的费用为1(费用单位). l  采用多票制的公共汽车,将设立某些站为关键站:那么,如果

[最短路]1722 最优乘车

题目描述 Description H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站. 一名旅客最近到H城旅游,他很想去S公园游玩,但如果从他所在的饭店没有一路巴士可以直接到达S公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士, 这样换乘几次后到达S公园. 现在用整数1,2,…N 给H城的所有的巴士站编号,约定这名

1722 最优乘车 1997年NOI全国竞赛

1722 最优乘车 1997年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 Description H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站. 一名旅客最近到H城旅游,他很想去S公园游玩,但如果从他所在的饭店没有一路巴士可以直接到达S公园,则他可能要先乘

267. [NOI1997] 最优乘车

★★   输入文件:bustravel.in   输出文件:bustravel.out   简单对比 时间限制:1 s   内存限制:128 MB H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站. 一名旅客最近到H城旅游,他很想去S公园游玩,但如果从他所在的饭店没有一路巴士可以直接到达S公园,则他可能要先乘某一路巴士坐几站,再下来

1377:最优乘车

[题目描述] H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴士线路.每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站.一名旅客最近到H城旅游,他很想去S公园游玩,但如果从他所在的饭店没有一路巴士可以直接到达S公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士, 这样换乘几次后到达S公园.现在用整数1,2,-N 给H城的所有的巴士站编号,约定这名旅客所在饭店的巴士站编号

【SSL1194】最优乘车

题面: 正文: 把每个边用链式前向星存起来,边权为\(1\),就可以愉♂快♂地最短路了 原文地址:https://www.cnblogs.com/GJY-JURUO/p/11997597.html

NOI 1997 最佳乘车(travel)

最优乘车 H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站. 一名旅客最近到H城旅游,他很想去S公园游玩,但如果从他所在的饭店没有一路已士可以直接到达S公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士, 这样换乘几次后到达S公园. 现在用整数1,2,…N 给H城的所有的巴士站编号,约定这名旅客所在饭店的巴士站编号