最短路径(数据结构实训)(难度系数100)

最短路径
描述:
已知一个城市的交通路线,经常要求从某一点出发到各地方的最短路径。例如有如下交通图:
 
则从A出发到各点的最短路径分别为:
B:0
C:10
D:50
E:30
F:60

输入:
输入只有一个用例,第一行包括若干个字符,分别表示各顶点的名称,接下来是一个非负的整数方阵,方阵维数等于顶点数,其中0表示没有路,正整数表示两点之间边的长度。可以假定该图为有向图。
最后一行为要求的出发点。

输出:
输出从已知起点到各顶点的最短路径长度。输出格式是根据顶点输入顺序,依次输出其最智短路径长度。各顶点分别用一行输出,先输出目标顶点,然后一冒号加一个空格,最后是路径长度。0表示没有路。

样例输入:
ABCDEF
0 0 10 0 30 100
0 0 5 0 0 0
0 0 0 50 0 0
0 0 0 0 0 10
0 0 0 20 0 60
0 0 0 0 0 0
A

样例输出:
B: 0
C: 10
D: 50
E: 30
F: 60

方法一(Floyd算法): 

import java.util.Scanner;public class Xingyuxingxi
{public static void main(String[] args){Scanner sc=new Scanner(System.in);String str=sc.next();int n=str.length();int [][]dt=new int[n][n];for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {dt[i][j]=sc.nextInt();if(dt[i][j]==0&&i!=j) {dt[i][j]=5000000;//因为题目数据范围有限,所以用5000000代替最大值,也可以用别的数代替}}}char a=sc.next().charAt(0);for(int k=0;k<n;k++){//floyd算法的简单之处,只需要三层循环,就能遍历出所有点到所有点的最短距离,如果范围过大就不要用floyd算法了for(int i=0;i<n;i++){for(int j=0;j<n;j++){dt[i][j]=Math.min(dt[i][j],dt[i][k]+dt[k][j]);//更新最短路径}}}int g=0;for(int i=0;i<n;i++) {if(str.charAt(i)==a) {//找到起始点的下标g=i;break;}}for (int i = 0; i < n; i++) {if(dt[g][i]==5000000)dt[g][i]=0;//如果为最大值表示没有路,题目要求用0表示没有路if(str.charAt(i)!=a)//如果不是起始点则输出最短距离System.out.printf("%c: %d\n",str.charAt(i),dt[g][i]);}}
}

方法二(Dijkstra算法):

import java.util.Scanner;public class Xingyuxingxi
{public static void main(String[] args){Scanner sc=new Scanner(System.in);String str=sc.next();int n=str.length();int [][]dt=new int[n][n];int []dist=new int[n];//储存选定起点到其他点的距离boolean []st=new boolean[n];//储存该点是否遍历过到其他点的距离for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {dt[i][j]=sc.nextInt();if(dt[i][j]==0&&i!=j) {dt[i][j]=5000000;//用5000000代替最大值Integer.MAX_VALUE}}}char a=sc.next().charAt(0);for (int i = 0; i < n; i++) {dist[i]=5000000;}int g=0;for(int i=0;i<n;i++) {if(str.charAt(i)==a){//找到起点下标g=i;break;}}dist[g]=0;for (int i = 0; i < n; i++) {int t=-1;for(int j=0;j<n;j++) {if(!st[j]&&(t==-1||dist[t]>dist[j])){//找到每次更新路线后t到起点的最短距离的点t=j;}}st[t]=true;for(int j=0;j<n;j++){//更新距离,各个点到t的距离dist[j]=Math.min(dist[j],dist[t]+dt[t][j]);}}for (int i = 0; i < n; i++) {if(dist[i]==5000000)dist[i]=0;//如果为最大值表示没有路,题目要求用0代替没有通路if(i!=g)System.out.printf("%c: %d\n",str.charAt(i),dist[i]);}}
}

关于为什么用5000000代替Integer.MAX_VALUE

因为题目中涉及到最大值的计算,如果使用Integer.MAX_VALUE加任意一个数的话就会变为负数,求最小值的话就会一直是Integer.MAX_VALUE+其他数的和,我自己写的时候每次加都会变成负数,所以就把最大值改小了,本题数据并不强,可以用一个足够大的数代替这个最大值即可,不一定非得是5000000

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

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

相关文章

go 源码解读 - sync.Mutex

sync.Mutex mutex简介mutex 方法源码标志位获取锁LocklockSlowUnlock怎么 调度 goroutineruntime 方法 mutex简介 mutex 是 一种实现互斥的同步原语。&#xff08;go-version 1.21&#xff09; &#xff08;还涉及到Go运行时的内部机制&#xff09;mutex 方法 Lock() 方法用于…

网盘项目话术(0.5w字精选)

功能结构图 数据库设计总结 该项目主要就是对文件的操作&#xff0c;file表&#xff0c;file_share表。 file表主要字段&#xff1a;id&#xff0c;用户id&#xff0c;父级目录id&#xff0c;文件的地址&#xff0c;文件的封面图片地址&#xff0c;创建和修改时间。 file_sha…

国际物流公司科普_集装箱种类区分和介绍_箱讯科技

集装箱运输的不断发展&#xff0c;为适应装载不同种类货物的需要&#xff0c;因而出现了不同种类的集装箱。今天和大家一起来总结一下。 按使用材料分类 根据箱子主体部件&#xff08;侧壁、端壁、箱顶等&#xff09;采用什么材料&#xff0c;就叫做什么材料制造的集装箱&…

TPRI-DMP平台介绍

TPRI-DMP平台介绍 TPRI-DMP平台概述 TPRI-DMP为华能集团西安热工院自主产权的工业云PaaS平台&#xff0c;已经过13年的发展和迭代&#xff0c;其具备大规模能源电力行业生产应用软件开发和运行能力。提供TPRI-DMP平台主数据管理、业务系统开发与运行、应用资源管理与运维监控…

【数据结构】C语言实现单链表的基本操作

单链表基本操作的实现 导言一、查找操作1.1 按位查找1.1.1 按位查找的C语言实现1.1.2 按位查找的时间复杂度 1.2 按值查找1.2.1 按值查找的C语言实现1.2.2 按值查找的时间复杂度 二、插入操作2.1 后插操作2.2 前插操作 三、删除操作结语 导言 大家好&#xff0c;很高兴又和大家…

C++ 之LeetCode刷题记录(三)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅&#xff0c;多学多练&#xff0c;尽力而为。 先易后难&#xff0c;先刷简单的。 13、罗马数字转整数 罗马数字包含以下七种字符: I&#xff0c…

ClickHouse基础知识(二):ClickHouse 安装教程

1. 准备工作 1.1 确定防火墙处于关闭状态 1.2 CentOS 取消打开文件数限制 &#xff08;1&#xff09;在 hadoop101 的 /etc/security/limits.conf 文件的末尾加入以下内容 sudo vim /etc/security/limits.conf&#xff08;2&#xff09;在 hadoop101 的/etc/security/limits.…

Rocky9 1.28安装kubernetes

1.环境准备 二进制安装比较复杂&#xff0c;但是也比较稳定&#xff0c;适用于线上环境使用。   本笔记参考自&#xff1a;https://github.com/cby-chen/Kubernetes &#xff0c;针对文中内容&#xff0c;有部分镜像无法拉取等&#xff0c;还有一部分有点小问题&#xff0c;…

SQL小技巧5:数据去重的N种方法,总有一种你想不到!

在平时工作中&#xff0c;使用SQL语句进行数据去重的场景非常多。 今天主要分享几种数据去重的SQL写法。 假如有一张student表&#xff0c;结构如下&#xff1a; create table student( id int, name varchar(50), age int, address varchar(100)); 表中的数据…

【解决方案】智能语音模块,东胜物联远场语音解决方案让控制更简单,应用于智能家居等场景

现在的天气真是冷得不想多动一下&#xff0c;又想打开取暖器&#xff1f;有了它&#xff0c;用声音就能遥控&#xff0c;今天我们就来聊聊智能语音模块。 技术概述 远场语音技术&#xff0c;采用了麦克风阵列、信号处理技术以及先进的语音识别引擎&#xff0c;使得设备能够在距…

C++ DAY2作业

1.课堂struct练习&#xff0c;用class&#xff1b; #include <iostream>using namespace std;class Stu { private:int age;char sex;int high; public:double score;void set_values(int a,char b,int c,double d);int get_age();char get_sex();int get_high(); }; vo…

Java开发框架和中间件面试题(8)

目录 82.Mybatis一级缓存&#xff0c;二级缓存&#xff1f; 83.Mybatis如何防止SQL注入&#xff1f; 84.mybatis中resultType和resultMap有什么区别&#xff1f; 85.如何在SpringBoot中禁用Actuator断点安全性&#xff1f; 86.什么是SpringBoot&#xff1f;SpringBoot有哪些…

go 使用 - sync.Metux

[TOC]&#xff08;sync.metux 使用&#xff09; 简介 简述使用metux使用的方法&#xff0c; 使用的注意点&#xff0c; 以及使用情况使用方法 提供的方法 Lock() 方法用于获取锁 Unlock() 方法用于释放锁 TryLock()方法尝试获取锁 对共享资源进行加锁&#xff0c; 例 &#…

数据库(Database)基础知识

什么是数据库 数据库是按照数据结构来组织、存储和管理数据的仓库&#xff0c;用户可以通过数据库管理系统对存储的数据进行增删改查操作。 数据库实际上是一个文件集合&#xff0c;本质就是一个文件系统&#xff0c;以文件的方式&#xff0c;将数据保存在电脑上。 什么是数据…

阿里云 ACK 云上大规模 Kubernetes 集群高可靠性保障实战

作者&#xff1a;贤维 马建波 古九 五花 刘佳旭 引言 2023 年 7 月&#xff0c;阿里云容器服务 ACK 成为首批通过中国信通院“云服务稳定运行能力-容器集群稳定性”评估的产品&#xff0c; 并荣获“先进级”认证。随着 ACK 在生产环境中的采用率越来越高&#xff0c;稳定性保…

leaflet学习笔记-地图图层控制(二)

图层介绍 Leaflet的地图图层控件可控制两类图层&#xff1a;一类是底图图层&#xff08;Base Layers&#xff09;&#xff0c;一次只能选择一个图层作为地图的背景图层&#xff0c;即底图图层&#xff0c;在地图图层控件中用单选按钮控制&#xff1b;另一类是覆盖图层&#xff…

大数据与人工智能|信息技术产业架构、行业发展与前沿技术(第2节)

内容链接&#xff1a;信息技术产业架构、行业发展与前沿技术&#xff08;大数据与人工智能系列课程 第2节&#xff09; 声明&#xff1a;学习使用&#xff0c;侵权必删&#xff01; 主要内容&#xff1a;1. 从算盘到量子计算机&#xff0c;介绍了半导体行业的发展历程和技术原…

吓一跳!哈佛大学最受欢迎的课程,我不敢相信我的眼睛!

文件销毁、硬盘销毁、数据销毁以及物料销毁是四个相互关联且在企业或组织运营中至关重要的环节。这四个方面都涉及信息安全和保密管理的核心内容&#xff0c;关乎企业的商业秘密、客户的个人信息以及各种敏感数据的保护。随着信息化和数字化的快速发展&#xff0c;如何安全、有…

thinkcmf 文件包含 x1.6.0-x2.2.3 已亲自复现

thinkcmf 文件包含 x1.6.0-x2.2.3 CVE-2019-16278 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用 修复建议总结 漏洞名称 漏洞描述 ThinkCMF是一款基于PHPMYSQL开发的中文内容管理框架&#xff0c;底层采用ThinkPHP3.2.3构建。ThinkCMF提出灵活的应用机制&a…

微信小程序登录(生成token,token校验)——后端

写在前面&#xff1a;如果想自己开发微信小程序&#xff0c;需要先到微信小程序官方平台注册账号&#xff0c;地址为&#xff1a;https://mp.weixin.qq.com/wxopen/waregister?actionstep1. 登录流程 其中&#xff0c;开发者服务器就是我们的后端服务器&#xff0c;微信接口服…