PTA 应急救援站选址(floyd+打印路径)

        大学城虎溪社区有很多居民小区,居民小区道路图是连通的。现要在该社区新建一个应急救援站,且该应急救援站要和某个小区建在一起。为了使应急救援最快速,经各部门商量决定:应急救援站建好后,离应急救援站最远的小区到应急救援站的距离应该最短。
        现在你是该项目的设计者,请你根据输入的小区个数N,相邻小区间的距离W(i,j),求出应急救援站的修建地点。小区名字依次用大写英文字母A, B, C.....表示。
为了简化问题,我们约定:
1)2<=N<=20; W(i,j)<=2000, 若小区间不相邻,则用整数65535代表无穷大。
2)任意两小区之间最短路径是唯一的。
3)当存在多个满足条件的修建地点时,优先选择ASCII码较小的小区作为修建地点。

下文中的输入样例构建的无向网如下图:

image.png

输入格式:

输入为N+1行。
第一行:小区个数N
接着输入一个N行,N列的矩阵,表示N个小区间道路连接情况。

输出格式:

输出为N+1行。
第一行:应急救援站修建地点和离应急救援站最远的小区到应急救援站的最短距离

接着N行:
每行输出该修建地点到其他小区的最短路径长,以及最短路径

输入样例:

在这里给出一组输入:

6
0 10 4 8 65535 65535
10 0 5 65535 12 5
4 5 0 65535 65535 3
8 65535 65535 0 8 65535
65535  12 65535 8 0 2
65535 5 3 65535 2 0

输出样例:

在这里给出相应的输出,行末尾无空格:

A 9
0 A
9 A->C->B
4 A->C
8 A->D
9 A->C->F->E
7 A->C->F

思路:

floyd+记录路径。

方法:

floyd+拿二维表存路径:

for(ll k = 1 ; k <= n ; k ++)//floydfor(ll i = 1 ; i <= n ; i ++)for(ll j = 1 ; j <= n ; j ++)if(v[i][j] > v[i][k]+v[k][j])v[i][j] = v[i][k]+v[k][j],lj[i][j]=k;//记录路径

查找路径:

void dy(ll x ,ll y){//寻找路径 if(!lj[x][y])return;dy(x,lj[x][y]);//先往后找 cout << "->" << s[lj[x][y]];//输出路径 dy(lj[x][y],y);//往后找 return;
}

AC代码: 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl "\n"const ll N = 1e2+7 ,M = 65535;
ll n;
ll v[N][N],lj[N][N];
string s=" ABCDEFGHIJKLMNOPQRSTUVWXYZ";void dy(ll x ,ll y){//寻找路径 if(!lj[x][y])return;dy(x,lj[x][y]);//先往后找 cout << "->" << s[lj[x][y]];//输出路径 dy(lj[x][y],y);//往后找 return;
}void solve(){cin >> n;for(ll i =  1 ; i <= n ; i ++)for(ll j = 1 ; j <= n ; j ++)cin >> v[i][j];memset(lj,0,sizeof lj);for(ll k = 1 ; k <= n ; k ++)//floydfor(ll i = 1 ; i <= n ; i ++)for(ll j = 1 ; j <= n ; j ++)if(v[i][j] > v[i][k]+v[k][j])v[i][j] = v[i][k]+v[k][j],lj[i][j]=k;//记录路径 ll w=-1,cnt=M;//寻找起始点 for(ll i = 1 ; i <= n ; i ++){ll c=0;for(ll j = 1 ; j <= n ; j ++)c=max(c,v[i][j]);if(c < cnt)w=i,cnt=c;}cout << s[w] << " " << cnt << endl;for(ll i = 1 ; i <= n ; i ++){cout << v[w][i] << " " << s[w];stack<ll>st;dy(w,i);//打印路径(路径没有头尾!!!) if(w != i)cout <<  "->" << s[i];//输出结尾 cout << endl;}return ;
}int main(){ll t=1;//cin >> t;while(t --)solve();return 0;
}

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

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

相关文章

使用 Axios 处理 AxiosError 的三种常见方法

在使用 Axios 时处理 AxiosError 有几种常见的方法: 使用 try-catch 语句捕获异常: try {const response await axios.get(/api/data);// 处理响应数据 } catch (error) {if (error.response) {// 请求成功但状态码不在 2xx 范围console.log(error.response.data);console.l…

React Hooks全面解读与高效开发实践

React Hooks是React 16.8版本引入的新特性&#xff0c;它可以让函数式组件具有类组件的能力。通过使用Hooks&#xff0c;我们可以在不编写类的情况下&#xff0c;使用状态&#xff08;state&#xff09;和其他React特性&#xff0c;使得组件的开发更加简单和高效。 在React中&…

Git - 设置全局用户名和邮箱

环境信息 Git 版本信息&#xff1a; $ git --version git version 2.33.0.windows.1设置全局用户名和邮箱 设置全局用户名&#xff1a; $ git config --global user.name "hello"设置全局邮箱&#xff1a; $ git config --global user.email "1234567890qq…

Web刷题记录——不翼而飞的余额

一、代码及思路解析 1、创建路由 // TODO&#xff1a;待补充代码&#xff0c;在此引入路由相关 API const { createRouter,createWebHistory } VueRouter; // TODO:待补充代码&#xff0c;为项目配置 history 模式的路由 const router createRouter({// 1、配置路由模式[…

单例模式以及常见的两种实现模式

单例模式是校招中最常考的设计模式之一. 设计模式其实就是类似于“规章制度”&#xff0c;按照这个套路来进行操作。 单例模式能保证某个类在程序中只存在唯一 一份实例。而不会创建出多个实例&#xff0c;如果创建出了多个实例&#xff0c;就会编译报错。而不会创建出多个实…

element-ui backtop 组件源码分享

今日简单分享 backtop 组件的源码实现&#xff0c;从以下三个方面&#xff1a; 1、backtop 组件页面结构 2、backtop 组件属性 3、backtop 组件事件 一、backtop 组件页面结构 二、backtop 组件属性 2.1 target 属性&#xff0c;触发滚动的对象&#xff0c;类型 string&am…

Java 流(Stream)、文件(File)和IO

Java 流(Stream)、文件(File)和IO 目录 Java 流(Stream)、文件(File)和IO 读取控制台输入 从控制台读取多字符输入 从控制台读取字符串 控制台输出 实例 读写文件 FileInputStream FileOutputStream 实例 文件和I/O Java中的目录 创建目录&#xff1a; 读取目录 Ja…

GitLab介绍、安装、创建第一个项目

一、Gitlab介绍 GitLab是一个基于Web的DevOps平台,提供了Git仓库管理、问题跟踪、代码审查、CI/CD等一系列功能。它由Dmitriy Zaporozhets和Valery Sizov于2011年创建,旨在为开发团队提供一个集中式的项目管理解决方案。以下是GitLab的一些关键特点和功能: 1、代码管理 提供…

JavaGUI编程

目录 GUI概念 Swing概念 组件 容器组件 窗口&#xff08;JFrame&#xff09; 代码 运行 面板&#xff08;JPanel&#xff09; 代码 运行 布局管理器 FlowLayout 代码 运行 BorderLayout 代码 运行 GridLayout 代码 运行 常用组件 标签(JLabel) 代码 运…

HarmonyOS实战开发-WebSocket的使用。

介绍 本示例展示了WebSocket的使用&#xff0c;包括客户端与服务端的连接和断开以及客户端数据的接收和发送。 WebSocket连接&#xff1a;使用WebSocket建立服务器与客户端的双向连接&#xff0c;需要先通过createWebSocket方法创建WebSocket对象&#xff0c;然后通过connect…

HarmonyOS实战开发-证书管理、如何实现对签名数据进行校验功能。

介绍 本示例使用了ohos.security.certManager相关接口实现了对签名数据进行校验的功能。 实现场景如下&#xff1a; 1&#xff09;使用正确的原始数据和签名数据进行签名校验场景&#xff1a;模拟服务端对签名数据进行校验&#xff0c;验证客户端身份和原始数据完整性。 2&…

多线程(46)线程局部存储

线程局部存储(Thread Local Storage, TLS)是一种允许数据在多个线程中被独立地存储的编程范式。在Java中&#xff0c;这通过ThreadLocal类实现&#xff0c;它提供了一种线程封闭的机制&#xff0c;确保每个线程都有自己的变量副本&#xff0c;从而避免了变量共享所带来的线程安…

MongoDB聚合运算符:$objectToArray

文章目录 语法使用例1&#xff0c;无内嵌文档的情况例2&#xff0c;有内嵌文档的情况 举例objectToAarray 举例使用objectToArray对内嵌字段求和 o b j e c t T o A r r a y 与 objectToArray与 objectToArray与arrayToObject一起使用的例子 $objectToArray聚合运算符用于将文档…

绝地求生:PUBG×杜卡迪联名上线!参与投稿评论赢取精美好礼

PUBG杜卡迪联名活动游戏内现已正式上线&#xff01;我们诚邀与您一起在开拓未知战场和书写新历史的过程中&#xff0c;与杜卡迪一同实现您的极速梦想&#xff01; 在本次的杜卡迪工坊中&#xff0c;更是包含了具备标志性红色在内的6种颜色供您自由选择&#xff0c;一起自由驰骋…

Redis入门到通过之Redis安装

文章目录 Redis安装说明1.单机安装Redis1.1.安装Redis依赖1.2.上传安装包并解压1.3.启动1.3.1.默认启动1.3.2.指定配置启动1.3.3.开机自启 2.Redis客户端2.1.Redis命令行客户端2.2.图形化桌面客户端2.2.1.安装2.2.2.建立连接 Redis安装说明 大多数企业都是基于Linux服务器来部…

【Python 小学低段竞赛数学题】数字5在书本页码中出现16次,这本书最多有多少页

书的页码编号是按1 2 3 4 5一直这样下去的&#xff0c;数字5恰好出现了16次&#xff0c;请问这本书最多可以有多少页&#xff1f; 包含5的页码&#xff1a; 5 15 25 35 45 50 51 52 53 54 55 56 57 58 59 65 需要注意页码55&#xff0c;出现了两次5。因此到59页就满足数字5出现…

力扣爆刷第117天之CodeTop100五连刷71-75

力扣爆刷第117天之CodeTop100五连刷71-75 文章目录 力扣爆刷第117天之CodeTop100五连刷71-75一、48. 旋转图像二、39. 组合总和三、113. 路径总和 II四、34. 在排序数组中查找元素的第一个和最后一个位置五、394. 字符串解码 一、48. 旋转图像 题目链接&#xff1a;https://le…

Swift中的布尔型

在Swift中&#xff0c;布尔型数据用Bool类型表示。布尔型数据只有两个可能的值&#xff1a;true和false。布尔型数据通常用于条件判断和逻辑运算。例如&#xff1a; let isTrue true let isFalse falseif isTrue {print("这是真的") } else {print("这是假的…

GPT中的Transformer架构以及Transformer 中的注意力机制

目录 1 GPT中的Transformer架构 2 transformer中的注意力机制 参考文献&#xff1a; 看了两个比较好的视频&#xff0c;简单做了下笔记。 1 GPT中的Transformer架构 GPT是Generative Pre-trained Transformer单词的缩写&#xff0c;其中transformer是一种特定的神经网络&a…

如何排查k8s集群中Pod内mysqld进程占用内存消耗过高?

文章目录 1. **查看容器资源使用情况**&#xff1a;2. **进入容器内部**&#xff1a;3. **检查进程内存使用**&#xff1a;4. **MySQL服务器状态检查**&#xff1a;5. **MySQL日志分析**&#xff1a;6. **使用专门的MySQL监控工具**&#xff1a;7. **配置文件检查**&#xff1a…