【现实生活实际应用】【公交车换乘算法——算法用在公交车】【单源最短路-如何根据图意构建图,最重要】最优乘车【sstream输入】

news2025/1/9 14:36:15

在这里插入图片描述

问题出现了
其实我们构图的时候,
我们已经知道1 - 3 - 5
那么我们直接让1 连到 3 和 5 表示直达
如果出现另一路 4 7 3 6

则3最终连接的是 5 和 6
从1开始,先走到了 3 和 5
然后bfs宽搜到3(此时就表示换乘了,因为1直达的已经都遍历完了)然后3 连接的是 6
再次宽搜到5发现没有换车了
再搜6
发现到7了 (此时再次换车)
按着上述逻辑
看代码
就能理解代码了

专注 效率 记忆
预习 笔记 复习 做题

欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)
 
文章字体风格:
红色文字表示:重难点★✔
蓝色文字表示:思路以及想法★✔
 
如果大家觉得有帮助的话,感谢大家帮忙
点赞!收藏!转发!

最优乘车

        • 题意分析
        • 补充说明 sstream的用法

原题链接
在这里插入图片描述

题意分析

给了3条路线
6 7
4 7 3 6
2 1 3 5

问 1 - 7 最少换几次公交车?

怎么做呢?

这种题是图论,
首先想到构建图,进行分析

那么如何构建图?
我们分析

由于问的是 1 - 7 最小换成

我们发现

必须先坐3号线
1 - 到 3点

然后 3点可以继续坐到 5点

或者 换车到 6点

分析到这里,我们想一下,
如果我们问 1 - 5 最小换车次数
那么就是0呀

但是 1 - 6呢
那就是 1

我们开始构图

1点到3点的距离是 0 或者 1
用 1 或者 0都可以

我们就用1

那么 3 到 5的距离 是 1
那么我们分析
1 - 5 应该是0的呀

问题出现了
其实我们构图的时候,
我们已经知道1 - 3 - 5
那么我们直接让1 连到 3 和 5 表示直达
如果出现另一路 4 7 3 6

则3最终连接的是 5 和 6
从1开始,先走到了 3 和 5
然后bfs宽搜到3(此时就表示换乘了,因为1直达的已经都遍历完了)然后3 连接的是 6
再次宽搜到5发现没有换车了
再搜6
发现到7了 (此时再次换车)
按着上述逻辑
看代码
就能理解代码了

#include<iostream>
#include<algorithm>
#include<sstream>
#include<queue>
#include<cstring>

using namespace std;

const int N = 510;

int g[N][N];
int n,m;
int a[N];
int d[N];

void bfs()
{
    queue<int> q;
    q.push(1);
    
    memset(d,0x3f,sizeof d);
    d[1] = 0;
    
    while(q.size())
    {
        auto t = q.front(); q.pop();
        // cout << t << ' ' << d[t] << endl;
        for(int i = 1; i <= n; i++)
        {
            if(g[t][i] && d[i] > d[t] + 1)
            {
                d[i] = d[t] + 1;
                q.push(i);
            }
        }
        
    }
}

int main()
{
    cin >> m >> n;
    getchar();
    while(m--)
    {
        string line;
        getline(cin,line);
        stringstream ssin(line);
        int cnt = 0,p;
        while(ssin >> p)
        {
            a[cnt++] = p;
        }
        for(int i = 0; i < cnt; i++)
        {
            for(int j = i + 1; j < cnt; j++)
            {
                g[a[i]][a[j]] = 1;
            }
        }
        
    }
    bfs();
    if(d[n]!=0x3f3f3f3f)
        cout << max(0,d[n]-1);
    else
        cout << "NO";
    
    return 0;
}

补充说明 sstream的用法

#include<sstream>
getchar();//处理换行符
string line;
getline(cin,line);
streamstring ssin(line);
while(ssin >> x)//ssin就表示和正常读取一样,什么数据类型读取什么即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/582708.html

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

相关文章

JavaEE进阶5/25(Spring 注解)

1.五大类注解详解&#xff08;重点 1.Controller 控制器&#xff0c;用于业务逻辑层&#xff0c;来控制用户的行为。它用来检查用户参数的有效性。 当用户的参数有效的话会继续分发到服务层。controller可以理解为程序的安保系统 2.Service 服务层。归属服务层&#xff0c;调用…

【JavaSE】Java基础语法(二十九):Map集合

文章目录 1. Map集合概述和特点2. Map集合的基本功能3. Map集合的获取功能【应用】4. Map集合的遍历(方式1)5. Map集合的遍历(方式2)6. map四种遍历方式 1. Map集合概述和特点 Map集合概述 interface Map<K,V> K&#xff1a;键的类型&#xff1b;V&#xff1a;值的类型…

MySQL — 视图、存储过程、触发器

文章目录 视图/存储过程/存储函数/触发器一、视图1.1 语法1.1.1 创建视图1.1.2 查询1.1.3 修改1.1.4 删除1.1.5 对数据的操作 1.2 检查选项1.2.1 cascaded1.2.2 local 1.3 视图的更新1.4 视图的作用1.5 案例1.5.1 案例11.5.2 案例2 二、存储过程2.1 介绍2.2 基本语法2.3 变量2.…

【保姆级】拯救“爆红”C盘,轻松清出30G

目录 第一步 ​第二步 第三步 第四步 ​第五步&#xff08;可选&#xff09; 打开一个程序&#xff0c;发现等它启动好了咖啡都凉叻。。 访问个文件&#xff0c;都要转个圈圈。。不、转好几个圈圈⭕️⭕️⭕️⭕️⭕️⭕️⭕️ 更新、安装新软件时&#xff0c;提示“安装…

分布式网络通信框架(十二)——zookeeper简介与安装

简介 zookeeper&#xff08;后文简称zk&#xff09;提供功能有&#xff1a;服务注册中心、全局服务命名、以及分布式锁。 RPC服务会被发布到不同的服务器上&#xff0c;本项目zk的作用就是找到某一个RPC服务在哪一个服务器上&#xff0c;提供服务注册发现功能。 zk的数据如何…

Linux-0.11 入口函数main.c详解

Linux-0.11 入口函数main.c详解 模块简介 main.c大部分代码主要是对内核进行初始化&#xff0c;而main.c开始&#xff0c;就都是c语言编写的内核了。 函数详解 time_init static void time_init(void)该函数读取CMOS时钟信息作为系统的开机时间。 struct tm time;do {time…

携手高通,移远通信以全栈式车载产品实力重新定义汽车

5月25日至26日&#xff0c;2023高通汽车技术与合作峰会在苏州成功举办。 移远通信作为高通重要的长期战略合作伙伴&#xff0c;受邀参加此次峰会&#xff0c;并现场展示了支持5G/4G、C-V2X、算力、UWB、Wi-Fi、高精定位等领先技术的多款车规级模组、天线等产品&#xff0c;更有…

Three.js——六、模型对象/材质

模型对象/材质 三维向量 Vector3 与模型位置 该类表示的是一个三维向量&#xff08;3D vector&#xff09;。 一个三维向量表示的是一个有顺序的、三个为一组的数字组合&#xff08;标记为 x、y 和 z&#xff09;&#xff0c; 可被用来表示很多事物&#xff0c;例如&#xff…

Flutter(七)功能型组件

1.导航返回拦截&#xff08;WillPopScope&#xff09; 需求&#xff1a;再按一次退出应用 用户在1秒内点击两次返回按钮时&#xff0c;则退出&#xff1b;如果间隔超过1秒则不退出 import package:flutter/material.dart;class WillPopScopeTestRoute extends StatefulWidget…

建筑行业数字化转型,工程管理系统已成建筑行业转型的利器

建筑工程项目管理的困境 专业工种多、工作环境复杂&#xff0c;工期长&#xff0c;且整体工业化标准化程度较低。 进度难管控、项目沟通协作不畅、项目执行过程不透明、项目成本管控难、项目盈亏情况不清、项目难共享等。 什么是工程项目管理 工程项目管理指的是对工程项目…

茶润童心 以茶明礼

中国是茶的故乡&#xff0c;也是茶文化的发源地&#xff0c;茶文化也是中国文化的一部分。5月27日下午&#xff0c;8位武汉公益小天使来到中茶恩施硒茶全国运营中心开展少儿茶艺活动。 开场的自我介绍&#xff0c;公益小天使逐个进行自我介绍&#xff0c;喊着“好名字”互相加…

软件测试的一些关键点

软件测试的一些关键点 随着互联网的快速发展&#xff0c;软件已经成为了我们生活和工作中不可或缺的一部分。在软件开发过程中&#xff0c;一项重要的工作就是软件测试。软件测试是指对软件产品或系统进行验证和验证的过程。在软件测试中&#xff0c;需要注意以下关键点。 首先…

[转]Github进行fork后如何与原仓库同步

问题场景&#xff1a; 新公司要求所有的代码提交都要先通过自己的库提交到主repo上去&#xff0c;所以先在gitlab网页上fork出一个自己的库&#xff0c;在本地修改完代码后提交到远程自己库上&#xff0c;然后在gitlab网页上发起一个merge request请求&#xff0c;然后等待主r…

面试:webpack常用loader和plugin

Webpack简介 Webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部从一个或多个入口点构建一个 依赖图(dependency graph)&#xff0c;然后将你项目中所需的每一个模块组合成一个或多个 bundles&#xff0c;它们均…

如何选择专业的低代码开发平台?为企业数字化转型保驾护航

在当今快节奏的商业环境中&#xff0c;软件开发已经成为任何组织的关键方面。然而&#xff0c;由于市场上有无数的软件开发平台&#xff0c;选择合适的平台可能是一项艰巨的任务。对于任何想要创建满足其业务需求的高质量应用程序的组织来说&#xff0c;选择正确的软件开发平台…

英国卡迪夫大学学生使用ChatGPT写论文拿到一等成绩

近日&#xff0c;BBC报道了一则新闻&#xff1a; 卡迪夫大学一名学生在期末考试中使用ChatGPT撰写了一篇论文&#xff0c;并获得了一等成绩&#xff0c;要知道这是英国大学中最高等级的成绩&#xff0c;而他的另一篇论文没有使用ChatGPT&#xff0c;只获得了二等一的成绩。 此…

1.6. 数组

数组是一种数据结构&#xff0c;用于存储相同类型的多个元素。在 Java 中&#xff0c;数组是一个对象&#xff0c;它具有一定数量的连续内存空间。数组中的每个元素都有一个索引&#xff0c;用于访问和操作元素。 1.6.1. 数组的声明与初始化 在 Java 中&#xff0c;可以使用以…

Find My资讯|iOS17将重点改进钱包、Find My、SharePlay和AirPlay等功能

彭博社的马克・古尔曼&#xff08;Mark Gurman&#xff09;在最新一期 Power On 时事通讯中表示&#xff0c;苹果即将推出的 iOS 17 系统将改进 Wallet、Find My、SharePlay 和 AirPlay 等多项功能。 古尔曼在博文中还表示苹果会增强 Find My 的位置服务&#xff0c;同样也没…

前端数据可视化开发平台FlyFish数据源应用教程详解

介绍 飞鱼&#xff08;FlyFish&#xff09;是云智慧开源的一款免费的数据可视化编排平台。通过简易的方式快速创建数据模型&#xff0c;通过拖拉拽的形式&#xff0c;快速生成一套数据可视化解决方案。在飞鱼产品中可以通过直接连接 MySQL 、 Oracle 等数据库直接从数据源中获…

LiangGaRy-学习笔记-Day17

1、磁盘的介绍 自动分区、手工分区、命令工具分区 1.1、磁盘分类 根据介质来区分&#xff1a; 机械硬盘和固态硬盘 通过盘大小&#xff1a; 3.5英寸和2.5英寸 通过接口分类&#xff1a; SAS、SATA、FC scisi 根据功能&#xff1a; 桌面和企业级别 1.2、磁盘类型 HD…