最优乘车

题目描述

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.mzph.cn/news/795893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

42. 接雨水(Java)

目录 题目描述:输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a; height [0,1,0,2,1,0,1,3,2,1,2,1]输出&#xff1…

JavaEE 初阶篇-生产者与消费者模型(线程通信)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 生产者与消费者模型概述 2.0 在生产者与消费者模型中涉及的关键概念 2.1 缓冲区 2.2 生产者 2.3 消费者 2.4 同步机制 2.5 线程间通信 3.0 实现生产者与消费者模…

【ArcGIS微课1000例】0107:ArcGIS加载在线历史影像服务WMTS

文章目录 一、WMTS历史影像介绍二、ArcGIS加载WMTS服务三、Globalmapper加载WMTS服务一、WMTS历史影像介绍 通过访问历史影响WMTS服务,可以将全球范围内历史影像加载进来,如下所示: WMTS服务: https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WM…

二叉树中所有距离为k的节点

题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 从目标节点的左孩子&#xff0c;右孩子&#xff0c;父亲节点出发去找&#xff0c;左孩子 右孩子 做法简单 &#xff0c; 主要是父亲节点 &#xff0c;因此我们需要知道每个节点的父亲节点&am…

【学习笔记】Elsevier的Latex模板文件(附网址)

注&#xff1a;这是一篇没有技术含量的水文&#xff0c;主要是看有人下载下来&#xff0c;居然当成资源需要积分才能下载。我觉得不行&#xff0c;故提供原始下载地址供查阅使用。 链接: 上述图片所示网址&#xff1a;链接直达

Redis(性能管理、主从复制、哨兵模式)概述及部署

目录 一、性能管理 1、查看Redis内存使用 2、内存碎片率 3、跟踪内存碎片率 4、内存使用率 5、内回收key 二、Redis集群有三种模式 三、Redis主从复制 1、主从复制的概念 2、主从复制的作用 3、主从复制的流程 4、搭建Redis主从复制 1.环境准备 2.安装Redis&#…

并查集学习(836. 合并集合 + 837. 连通块中点的数量)

//得先加集合个数再合并&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 核心代码&#xff1a; int find(int x){//返回父节点if(x ! p[x]) {p[x] find(p[x]);//路径压缩 } //孩子不等于爸爸&#xff0c;就…

先进电气技术 —— “控制”与“估计”

一、背景 在当今科技日新月异的时代&#xff0c;先进电气技术正在全球范围内以前所未有的速度发展&#xff0c;尤其是在“控制”与“估计”两大核心技术领域的突破&#xff0c;对电力系统、工业自动化、智能电网、电动汽车等诸多领域产生了深远影响。本文将探讨这两项核心技术…

基于微信小程序的生活日用品交易平台 的设计与实现

一、项目背景介绍&#xff1a; 随着计算机互联网技术的不断进步&#xff0c;也推动了计算机技术的进步&#xff0c;推动了社会的智能化&#xff0c;使科技与人们的日常需求紧密的联系到了一起&#xff0c;诞生人们追求更加便利的生活模式。计算机技术是社会前进的主力军&#x…

面试题——JVM老年代空间担保机制(我的想法)

这里借用一下人家的图&#xff0c;来说一下我的想法&#xff0c;嘻嘻。。。。 原文链接&#xff1a;一道面试题&#xff1a;JVM老年代空间担保机制-CSDN博客? 嗯&#xff0c;我觉得老年代担保机制的主要作用就是避免频繁触发FULL GC&#xff0c;这其实也是因为年轻代Minor GC…

前端:注册页面(后端php实现)

效果 代码 Regist.php <!-- 内部员工注册 --> <?php require_once get_db_conn.php; $conn db_connect();?> <?php //设置变量的默认值 if (!isset($_POST[UserID])) {$_POST[UserID] ; } if (!isset($_POST[Password])) {$_POST[Password] ; } if (!i…

实战:Solaris系统下Oracle 12.2 在线扩容ASM磁盘组操作记录

这篇文章主要是为了记录一下操作&#xff0c;这个假期又要给这套RAC扩容磁盘。 我这套Solaris的小机我还不总操作这玩意&#xff0c;和LINUX有点小差别&#xff0c;整理记录一下&#xff0c;要不每次都是现翻。 存储端划LUN映射到主机 登录到3PAR存储控制台&#xff0c;创建…

数据生成 | Matlab实现基于DE差分进化算法的数据生成

数据生成 | Matlab实现基于DE差分进化算法的数据生成 目录 数据生成 | Matlab实现基于DE差分进化算法的数据生成生成效果基本描述模型描述程序设计参考资料 生成效果 基本描述 1.Matlab实现基于DE差分进化算法的数据生成&#xff0c;运行环境Matlab2021b及以上&#xff1b; 2.计…

SSL/TLS:网络安全中的基石

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Vue3_2024_8天【vue2中的标签ref和vue3中的标签ref的区别】

第一&#xff1a;Vue 2 中的 ref 在 Vue 2 中&#xff0c;ref 主要用于在模板中注册引用信息。它可以用在html标签上或&#xff08;子&#xff09;组件上。一旦标签元素或组件被渲染&#xff0c;你就可以通过 this.$refs 来访问它。 <template> <div ref"myDiv&…

HUD抬头显示器阳光倒灌实验一般步骤

概述 汽车HUD&#xff08;Head-Up Display&#xff0c;即抬头显示器&#xff09;阳光倒灌实验是一种用于评估汽车抬头显示器在阳光直射条件下显示效果的测试。该实验的目的是确保HUD系统在强烈的阳光下依然能够清晰地显示信息&#xff0c;不影响驾驶员的视线和驾驶安全。 一般…

FJSP:小龙虾优化算法(Crayfsh optimization algorithm,COA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

一、柔性作业车间调度问题 柔性作业车间调度问题&#xff08;Flexible Job Shop Scheduling Problem&#xff0c;FJSP&#xff09;&#xff0c;是一种经典的组合优化问题。在FJSP问题中&#xff0c;有多个作业需要在多个机器上进行加工&#xff0c;每个作业由一系列工序组成&a…

Python-VBA编程500例-033(入门级)

角色定位(Role Positioning)在编程中的实际应用场景主要体现在以下几个方面&#xff1a; 1、权限管理&#xff1a;在开发企业级应用或复杂的系统时&#xff0c;角色定位用于定义和管理用户的权限。例如&#xff0c;一个系统可能有管理员、普通用户、访客等不同角色&#xff0c…

LCD屏幕mmap显示

目录 前言 一.LCD显示 二.LCD颜色显示 2.1 直接显示 2.2 mmap映射显示 前言 mmap是一种内存映射文件的方法&#xff0c;它允许将文件或其它对象映射到进程的地址空间。 使用mmap映射函数进行映射显示&#xff0c;与屏幕普通直接显示相比有很大的优势 一.LCD显示基础 像素、分辨…

二叉树进阶——手撕二叉搜索树

troop主页&#xff1a;troop 手撕二叉搜索树 1.二叉搜索树的定义2.实现&#xff08;非递归&#xff09;补充结构2.1查找2.2插入2.3删除&#xff08;重要&#xff09;情况1(无孩子&&一个孩子&#xff09; 3.二叉搜索树的应用3.1K模型3.2KV模型3.2.1KV模型的实现 总结二叉…