最优乘车

2024-04-07 02:12
文章标签 最优 乘车

本文主要是介绍最优乘车,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

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

输入描述

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

输出描述

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

样例输入
3 7
6 7
4 7 3 6
2 1 3 5
样例输出
2

这道题乍眼一看,好像啥也不是,但隐隐约约觉得肯定是图来做,但是怎么建图是个问题

其实最大的问题莫过于是怎么判断换乘,全都用二维数组标记一遍?显然是不可能的

先画个图

有一点乱,现在我们来理一下

首先,我先说怎么解决换乘的判断,在输入第i条巴士线路的时候,我们把所有元素连接起来

就拿样例第三条线路来举例

2->1->3->5

我们平常存邻接表因该这样存

a[2].push_back(1);
a[1].push_back(3);
a[3].push_back(5);

 但在这里不一样,我们要把2->3,2->5,1->5都建立上联系,这样一来,两者不能直接到达的,都是要换乘的,简而言之,就是在输入时,没有建立联系的,都不在一条线上,只要在一条线上的,一定能一步到达,到最后,再将答案减去1,可得正解

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
struct node{int to,val;
};
vector<node>a[N];
int m,n;
int g[N];
int dis[N],vis[N];
queue<int>q;
void spfa(){for(int i=2;i<=n;i++)dis[i]=INT_MAX;q.push(1);vis[1]=1;while(!q.empty()){int x=q.front();q.pop();vis[x]=0;for(int i=0;i<a[x].size();i++){int v=a[x][i].to;int w=a[x][i].val;if(dis[v]>dis[x]+w){dis[v]=dis[x]+w;if(vis[v]==0){q.push(v);vis[v]=1;}}}}
}
signed main(){scanf("%d%d",&m,&n);cin.ignore();while(m--){string s;getline(cin,s);stringstream ss(s);//以空格为分界线,分离元素int cnt=0;int p;while(ss>>p)g[cnt++]=p;//将元素分离到数组里for(int i=0;i<cnt-1;i++){for(int j=i+1;j<cnt;j++){a[g[i]].push_back(node{g[j],1});//建立一条站线上,点与点之间的联系}}}spfa();if(dis[n]==INT_MAX)printf("NO");else printf("%d",dis[n]-1);
}

这篇关于最优乘车的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881402

相关文章

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,

4-4.Andorid Camera 之简化编码模板(获取摄像头 ID、选择最优预览尺寸)

一、Camera 简化思路 在 Camera 的开发中,其实我们通常只关注打开相机、图像预览和关闭相机,其他的步骤我们不应该花费太多的精力 为此,应该提供一个工具类,它有处理相机的一些基本工具方法,包括获取摄像头 ID、选择最优预览尺寸以及打印相机参数信息 二、Camera 工具类 CameraIdResult.java public class CameraIdResult {

华为OD机试 - 最优结果的a数组数量 - 贪心思维(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。 一、题目描述

清华MEM作业-利用管理运筹学的分析工具slover求解最优解的实现 及 通过使用文件或者套节字来识别进程的fuser命令

一、清华MEM作业-利用管理运筹学的分析工具slover求解最优解的实现         最近又接触了一些线性求解的问题,以前主要都是在高中数学里接触到,都是使用笔算,最后通过一些函数式得出最小或者最大值,最近的研究生学业上接触到了一个Excel solver分析工具,对这种线性求最优解的问题感觉使用起来真是得心应手。在使用这个工具前,EXCEL里需要先装上solver工具,装起来很也简单,网上

【POJ】2728 Desert King 最优比率生成树——01分数规划【经典】

最近在刷巨巨们放出来的专题,然后没做几题就卡住了,果然还是太弱了T U T... 这次做到了一题01分数规划求解的生成树问题。 题目大意是这样的:给你一个无向完全图,每条边i都有两个权值,长度a[ i ],花费b[ i ],需要选出其中的一些边构造一颗生成树,生成树需要满足条件:∑ b [ i ] / ∑ a [ i ]最小。 这样我还是先来介绍一下01分数规划吧~ 给定一个上述的问

2024国赛数学建模备赛|30种常用的算法模型之最优算法-非线性规划

1.1   非线性规划的实例与定义 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不象线性规划有 单纯形法这一通用方法,非线性规划目前还没有适于各种问题的一般算法,各个方法都 有自己特定的适用范围。 下面通过实例归纳出非线性规划数学模型的一般形式,介绍有关非线性规划的基本 概念。 最佳投资方案应是投资

超好用的图纸加密软件排行榜 | 2024图纸加密软件的七款最优选择!

数字化设计日益普及的今天,图纸作为设计与工程的核心载体,其安全性成为了企业和设计师们最为关注的焦点之一。 面对日益复杂的数据泄露风险,如何有效地保护图纸文件的安全呢? 下面,我们就来探讨一下2024图纸加密软件的最优选择,为您介绍七款超好用的图纸加密软件! 一、域智盾:专业级图纸加密的领军者 ①透明加密 采用基于Windows文件系统驱动开发的透明加密技术,结合高强度国际流行加密算法

最短路径算法:迪杰克斯拉(Dijkstra)算法(基于贪心思想)【从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题】【能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低】

Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Viterbi和Dijkstra算法看起来比较像,两者的区别: Dijkstra算法适应范围更广。Viterbi算法用在特殊的有向无环图中,而Dijkstra算法可以用在

【Spfa】noip2009 最优贸易

最优贸易 (trade.pas/c/cpp) 【问题描述】 C 国有n 个大城市和 m 条道路,每条道路连接这n 个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为1 条。    C 国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同。但是,同

问题最优解:实际问题转换图论问题

文章目录 图论的本质概念理解指标衡量哪些实际问题可以转换成图论问题?案例:城市交通优化 图算法的作用及求解优化概念理解指标衡量案例:网络流量优化 图论的局限性与可能性概念理解指标衡量案例:社交网络中的用户行为分析 图论结构与模型概念理解指标衡量哪些场景问题可以转换成图模型?案例:医疗诊断中的贝叶斯网络 图论与机器学习概念理解指标衡量常见场景案例:社交网络中的用户行为预测 图算法的并行化与分布