贪心算法-4.5单源最短路径之Dijkstra算法(松弛操作)

2024-01-10 04:32

本文主要是介绍贪心算法-4.5单源最短路径之Dijkstra算法(松弛操作),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述:对下图中的有向图,应用Dijkstra算法计算从源顶点1到其他顶点间最短路径的过程列在下页的表中。
1
问题分析
2

public class test4_5 {public static void Dijkstra(int v,float[][] a,float[] dist,int[] prev){int n = dist.length;if(v<0||v>n-1) return;boolean[] s = new boolean[n];//1.初始化   dist[i]、s[i]和prev[i]for(int i=0;i<n;i++){dist[i] = a[v][i];s[i] = false;if(dist[i]==Float.MAX_VALUE) prev[i] = -1;else prev[i] = v;}s[v] = true; dist[v] = 0;for(int i=0;i<n-1;i++){  //加进去n-1个点//2.找最小——找没加进去点连接的最小权值float temp = Float.MAX_VALUE;int u = v;for(int j=0;j<n;j++){if((!s[j])&&temp>dist[j]){  //没加进去的点&&temp>dist[j]temp = dist[j];u = j;}}s[u] = true;  //把点加进去//3.调整for(int j=0;j<n;j++){if((!s[j])&&dist[j]>a[u][j]+dist[u]){dist[j] = a[u][j]+dist[u];prev[j] = u;}}}}public static void main(String[] args) {int v = 0; //选定的源点为第"0"点int n = 5; //点的个数float t = Float.MAX_VALUE;float[][] a = {{t,10, t,30,100},  //邻接矩阵,表示边<i,j>的权值{t, t,50, t,  t},{t, t, t, t, 10},{t, t,20, t, 60},{t, t, t, t,  t}};float[] dist = new float[n];int[] prev = new int[n];Dijkstra(v,a,dist,prev);for(int i=0;i<n;i++){if(v!=i){System.out.print("从"+v+"点到"+i+"点所花的最短路长为:"+dist[i]+"; 路径是:"+i);int k = i;while(prev[k]!=-1){System.out.print("——"+prev[k]);k = prev[k];}}System.out.println();}}
}

运行结果:

从0点到1点所花的最短路长为:10.0; 路径是:1——0
从0点到2点所花的最短路长为:50.0; 路径是:2——3——0
从0点到3点所花的最短路长为:30.0; 路径是:3——0
从0点到4点所花的最短路长为:60.0; 路径是:4——2——3——0

时间复杂度:O(n^2)。

这篇关于贪心算法-4.5单源最短路径之Dijkstra算法(松弛操作)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

利用Python把路径转为绝对路径的方法

《利用Python把路径转为绝对路径的方法》在Python中,如果你有一个相对路径并且想将其转换为绝对路径,你可以使用Path对象的resolve()方法,Path是Python标准库pathlib中... 目录1. os.path.abspath 是什么?怎么用?基本用法2. os.path.abspat

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su

Java Stream流与使用操作指南

《JavaStream流与使用操作指南》Stream不是数据结构,而是一种高级的数据处理工具,允许你以声明式的方式处理数据集合,类似于SQL语句操作数据库,本文给大家介绍JavaStream流与使用... 目录一、什么是stream流二、创建stream流1.单列集合创建stream流2.双列集合创建str

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下