单源最短路径( Dijkstra算法)JAVA实现

单源最短路径Dijkstra算法的实现(java版) 单源最短路径问题的问题提出是,计算带权有向图G =(V, E)中一个点(源点)到其余各顶点的最短路径长度,如下图所示。设源点为顶点1,采用Dijkstra算法求下图中源V0为到其余各顶点的最短路径。 直接上代码吧: public class Dijkstra { public static void main(String[] args) { // TODO Auto-generated ... 阅读详情

单源最短路径( Dijkstra算法)JAVA实现

package dijkstra;


public class Graph {
	final int max=100;
	/*
	 * 顶点节点
	 */
	public class VexNode{
			int adjvex;
			int data;
	}
	
	VexNode[] vexNodes;
	int[] thevexs; //顶点集合
	int[][] edges = new int[max][max]; //边集合
	
	
	/*
	 * 创建图
	 */
	public void createGraph(Graph graph,int[][] A,int[] vexs) {
		thevexs=vexs;
		for (int i = 0; i < vexs.length; i++) {
			  for (int j = 0; j < vexs.length; j++) {
				  graph.edges[i][j] = A[i][j];
			}
		}
	}
	
	/*
	 * 输出图
	 */
	public void printGraph(Graph graph) {
		for (int i = 0; i < graph.thevexs.length; i++) {
			for (int j = 0; j < graph.thevexs.length; j++) {
				//没有路径则输出/
				if (graph.edges[i][j]==1000) {
					System.out.printf("%4s","/");
					 
				}else {
					System.out.printf("%4d",graph.edges[i][j]);
				}
				
			}
			System.out.println("\n");
		}
	}
}
package dijkstra;

public class DijkStra {
			final int max = 100;

		
			
			 public static int[] Dijsktra(Graph graph,int start){  
			     //接受一个有向图的权重矩阵,和一个起点编号start(从0编号,顶点存在数组中)  
			        //返回一个int[] 数组,表示从start到它的最短路径长度  
			        int n = graph.thevexs.length;        //顶点个数  
			        int[] shortPath = new int[n];    //存放从start到其他各点的最短路径  
			        String[] path=new String[n]; //存放从start到其他各点的最短路径的字符串表示  
			         for(int i=0;i<n;i++)  
			             path[i]=new String(start+"-->"+i);  
			        int[] visited = new int[n];   //标记当前该顶点的最短路径是否已经求出,1表示已求出  
			          
			        //初始化,第一个顶点求出  
			        shortPath[start] = 0;  
			        visited[start] = 1;  
			  
			        for(int count = 1;count <= n - 1;count++)  //要加入n-1个顶点  
			        {  
			   
			            int k = -1;    //选出一个距离初始顶点start最近的未标记顶点  
			            int dmin = Integer.MAX_VALUE;  
			            for(int i = 0;i < n;i++)  
			            {  
			            	
			                if(visited[i] == 0 && graph.edges[start][i]<dmin)  
			                {  
			                    dmin = graph.edges[start][i];  
			                  
			                    k = i;  
			                }    
			                      
			            }  
			            System.out.println("k="+k);  
			               
			            //将新选出的顶点标记为已求出最短路径,且到start的最短路径就是dmin  
			            shortPath[k] = dmin;  
			  
			            visited[k] = 1;  
			    
			            //以k为中间点,修正从start到未访问各点的距离  
			            for(int i = 0;i < n;i++)  
			            {                 // System.out.println("k="+k);  
			                if(visited[i] == 0 && graph.edges[start][k] + graph.edges[k][i] < graph.edges[start][i]){  
			                	graph.edges[start][i] = graph.edges[start][k] + graph.edges[k][i];  
			                     
			                     path[i]=path[k]+"-->"+i;  
			                      
			                }  
			                  
			            }    
			       
			        }  
			         for(int i=0;i<n;i++)  
			           System.out.println("从"+start+"出发到"+i+"的最短路径为:"+path[i]);    
			         System.out.println("=====================================");  
			        
			        return shortPath;  
			    }  
			
}
package dijkstra;

public class Test {

	public static void main(String[] args) {
			final int INF = 1000;
			int[] vexs = {0,1,2,3,4,5};
			int[][] A ={
					{0,50,10,INF,INF,INF},
					{INF,0,15,50,10,INF},
					{20,INF,0,15,INF,INF},
					{INF,20,INF,0,35,INF},
					{INF,INF,INF,30,0,INF},
					{INF,INF,INF,3,INF,0},
					
			};
			Graph graph = new Graph();
			graph.createGraph(graph, A, vexs);
			graph.printGraph(graph);
			DijkStra dijkStra = new DijkStra();
			int[] shortPath = dijkStra.Dijsktra(graph, 2);
			
			
		      for(int i = 0;i < shortPath.length;i++)  
		    	  if (shortPath[i]!=INF) {
		             System.out.println("从"+"2"+"出发到"+i+"的最短距离为:"+shortPath[i]);    
		    	  }
		    }  
		     
	

}
java实现Dijkstra最短路径算法 主要为大家详细介绍了java实现Dijkstra最短路径算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 立即下载

相关推荐

单细胞测序避坑指南:为什么你的免疫组库数据总出问题?5‘转录组7个关键细节

本文深度解析了5'端单细胞测序技术在免疫组库研究中的应用与常见问题。文章从5'端建库的分子机制入手,重点剖析了其在捕获TCR/BCR序列上的独特优势,并系统梳理了从样本处理、文库构建到数据质控全流程中7个最易出错的细节,为研究者提供了一份实用的避坑指南,旨在帮助提升免疫组库数据的质量和可靠性。

weixin_29208327的博客 482

Dijkstra算法的Java实现

Dijkstra算法的Java实现 参考**如果天空不死的博客园**中的内容,自己写了一个dijkstra算法的Java实现。 用vexs储存节点数据 matrix[][] 储存图矩阵 有什么不对的请批评指正! 下图是代码运行结果 节点0 路径:5 4 3 距离22 节点1 路径:2 3 距离13 节点2 路径:3 距离3 节点3 路径:距离0 节...

weixin_43806015的博客 5135

【初阶】手把手教你轻松上手Denodo | 连接数据库并创建基本视图 (二)

在本教程的第二部分,我们将涵盖:连接到数据库,与创建基本视图。

Denodo的博客 1113

Dijkstra算法实现(java)

一、Dijkstra算法介绍   Dijkstra(迪杰斯特拉)算法是求解单源最短路径的经典算法,其原理也是基于贪心策略的。 二、Dijkstra算法原理   Dijkstra算法设置一个集合SSS记录已求得的最短路径的顶点,初始时把源点v0v_{0}v0​放入SSS,集合SSS每并入一个新顶点viv_{i}vi​,都要修改源点v0v_{0}v0​到集合V−SV-SV−S中顶点当前的最短路径长度值。   在构造的过程中还设置了两个辅助数组: (1)dist[]:记录从源点v0v_{0}v0​到其他各顶点当

weixin_43698993的博客 5231

一文搞定 GitHub SSH Key:生成、配置、好处全攻略

本文详细介绍了如何配置GitHub SSH Key,实现免密安全认证。主要内容包括:SSH协议的四大优势(免密登录、安全性高、稳定省心、支持自动化);Git身份配置步骤;检查本地SSH Key;生成RSA密钥对;添加密钥到SSH代理;复制公钥到GitHub;测试连接。配置完成后,开发者可通过SSH地址克隆仓库,实现push/pull全程免密操作。该方案显著提升Git使用效率,同时保障安全性,是开发者必备技能。

qq_62904883的博客 960

从零编写linux0.11 - 第二章 内核初始化

编程环境:Ubuntu Kylin 16.04 代码仓库:https://gitee.com/AprilSloan/linux0.11-project linux0.11源码下载(不能直接编译,需进行修改) 1.添加内核 进入内核后也不是马上进入main函数,上一章只是暂时设置gdt,此外还要设置idt和其他的一些初始化操作,这些内容也要使用汇编进行编写,此处采用AT&T格式的汇编。 以下为head.s的内容,为了简单起见,内容还是一个死循环。 .globl startup_32 startup_3

皓空Fly的博客 1266

Dijkstra——最短路径路由算法java实现

路由算法分为两种:距离矢量算法(DV)和链路状态算法(LS),Dijkstra算法是LS算法的主要表现形式。在路由算法中,Dijkstra算法主体和数据结构与算法课程中的并无二致,只是需要计算源结点到其余所有能够到达结点的路径长度,即把其余所有结点均视为目标结点,并通过表格(数组)对算法过程和结果进行记录。 算法的伪代码如下: Initialization: N'= {u} for all nodes v if v adjacent to u then D(v)= c(...

Lem0n__的博客 2410

【4. BSP开发指南 - [4.6. 安全启动使用说明]】

【4. BSP开发指南 - [4.6. 安全启动使用说明]】

Sugar_wolf的博客 276

单源最短路径(Dijkstra算法详解&&Java实现)

在寻找加权无向图中的最小生成树的Prim算法:构造最小生成树每一步都向这棵树中添加一条新的边。Dijkstra算法采用了类似的方法计算最短路径树。关于Prim算法可点击下方链接进行了解。

一条漂流鱼 1700

23种设计模式-代理(Proxy)设计模式

软考中级-软件设计师 代理设计模式

片言可决讼,半纸能缚龙 1784

GPU架构(1.1)--介绍 GPU的 VPU(Vision Processing Unit)架构

基于自研的 VPU(Vision Processing Unit)架构,专为高性能图形处理和深度学习设计。VPU 架构通过优化计算单元、内存层次结构、同步机制和指令流水线,提供了卓越的性能和能效。VPU 架构通过优化计算单元、内存层次结构、同步机制和指令流水线,提供了卓越的性能和能效。这种架构不仅适用于高性能图形处理,还广泛应用于深度学习、科学计算和边缘计算等领域。通过了解 VPU 架构的详细设计和工作原理,读者可以更好地利用这些先进的 GPU 技术,开发出高效、可靠的计算系统。

MHD0815的博客 1300

Dijkstra算法求单源最短路径Java实现

如果所采用的实现方式合适,Dijkstra算法的运行时间要低于前面所说的Bellman_Ford算法,但是Dijkstra算法要求图中没有负边。Dijkstra算法在运行过程中维持的关键信息是一组结点集合S。从源结点s到该集合中每个结点之间的最短路径已经被找到。算法重复从结点集V-S中选择最短路径估计最小的结点u,将u加入到集合S,然后对所有从u发出的边进行松弛(有关松弛操作可见http://bl

仰起脸笑得像满月 4493

大模型之Spring AI实战系列(二十六):Spring Boot + DeepSeek 实战指南:构建AI聊天应用

在人工智能技术飞速发展的今天,大型语言模型已经成为了推动技术创新的重要力量。DeepSeek作为国内领先的大型语言模型提供商,其推出的DeepSeek系列模型在多个领域都展现出了卓越的性能。本文将详细介绍如何使用Spring Boot框架集成DeepSeek API,构建一个简单的AI聊天应用。我们将实现两个核心功能:普通文本生成和流式文本生成。

寻道AI,探索AI无限可能! 2265

单源最短路径 Dijkstra算法 Java 代码实现(贪心算法)

单源最短路径 Dijkstra 算法(Java代码实现)

若尘的博客 3729

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Dijkstra 单源最短路径算法 Java实现

Dijkstra算法 非负权单源最短路径算法 Java实现

我家有只小金毛的博客 2251

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Dijkstra 算法求单源最短路径—— Java 实现

package com.algorithm.greed; import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; /** * @author zhoushixiong * @Description Dijkstra 算法求单源最短路径 * @date 2020/11/18 8:58 **/ public c.

mengyanyuan8023的博客 477

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

单源最短路径问题:采用Dijkstra算法求下图中源V0为到其余各顶点的最短路径。Java实现

1、单源最短路径问题的问题提出是,计算带权有向图G =(V, E)中一个点(源点)到其余各顶点的最短路径长度,如下图所示。设源点为顶点1,采用Dijkstra算法求下图中源V0为到其余各顶点的最短路径。 public class Dijkstra { private static final Integer M = Integer.MAX_VALUE; //无穷大 /** * Dijkstra算法,求单源最短路径 * * @param v 出发点的下

weixin_43630166的博客 3237

JAVA实现Dijkstra算法求单源最短路径

JAVA实现Dijkstra算法求单源最短路径 通过输入如有向图和有图源点的源点,可以输出该源点到其他各点的最短距离,及最短路径。 有向图描述类 package domain; /*有向图类*/ public class Graph { public int G_num = 8; public int edge[][]={ {Integer.MAX_VALUE,Integer.MAX_VALUE,47,Integer.MAX_VALUE,70,24,Integer.

youngking23的博客 723

两种经典的单源最短路径算法图解与java实现(贪心Dijkstra和A*)

典型的启发式搜索有两种,分别是贪婪最佳优先搜索(Greedy best-first search)和A*寻路搜索。这篇文章以最短路径问题为例来展开讨论两种搜索方法的思路。 可求最短路径的结构往往是有向带权图,用代码表示就是 public class Graph { // 有向有权图的邻接表表示 private LinkedList<Edge> adj[]; // 邻接表 pri...

我的技术日常 2076

单源最短路径( Dijkstra算法)JAVA实现[转]

转载自:https://blog.youkuaiyun.com/gloria0610/article/details/23742799 单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路径。在弄清楚如何求算单源最短路径问题之前,必须弄清楚最短路径的最优子结构性质。 一.最短路径的最优子结构性质 该性质描述为:如果P(i,j)={Vi….Vk..Vs…Vj}是从顶点i到j的最短路径,k和s是这条...

tkzc_csk的博客 680

Dijkstra算法----单源最短路径的贪心算法Java具体代码实现

这是Dijkstra算法的编程实现,package Dijkstra; public class DijstraSF { public static void main(String[] args) { float s=Float.MAX_VALUE-1000; float [][]a = {{s,s, s,s, s, s}, {s,s,10,s,30,1

YuYunTan的专栏 6026

算法java实现--贪心算法--单源最短路径问题--Dijkstra算法

单源最短路径问题()的java实现(贪心算法) 具体问题描述以及C/C++实现参见网址 http://blog.youkuaiyun.com/liufeng_king/article/details/8720896

qipanliming的专栏 6127

dijkstra算法(单源最短路径) Java实现

用例图: 用ArrayList实现的邻接表图,每个结点有个动态列表记录这个结点的邻边数据Edge包括(指向的下一个结点,边权)基于此图写了一个dijk算法。 dijk的主要流程: 花销表int[] costs:记录从源点到各花销的最短路径。 访问表boolean[] vis:表示哪些结点可以走。 1.costs[源点] = 0,其他点的cost设置为Integer.MAX_VALUE 2.vis...

Aiven 2124

单源最短路径Dijkstra算法(java实现)

一直没写过Dijkstra算法,都是停留在理论中,这次终于写了一个,当然也参考了其他人的code,但是毕竟还是从code上面又进步了,继续刷题~~~ 1、牛客网题目: 原来是要到醋溜站台乘坐醋溜快车到醋溜港”,亮亮解出了地图隐藏的秘密,赶紧奔向醋溜站台,但到了之后,亮亮忧桑地发现,从醋溜站台到醋溜港沿途的每个车站都有很多美女被他飒爽的英姿所吸引,只要经过车站就会被这些漂亮的女孩搭讪,但

iCoding91 768

贪心算法最短路径java_算法java实现--贪心算法--单源最短路径问题--Dijkstra算法...

单源最短路径问题(Dijkstra算法)的java实现(贪心算法)具体问题描述以及C/C++实现参见网址http://blog.youkuaiyun.com/liufeng_king/article/details/8726066import java.util.Scanner;public class Dij {/*** 单源最短路径* @param v 顶点* @param a 图用二维数组表示* @pa...

weixin_36313588的博客 784
上一篇: Java基于无向有权图实现克鲁斯卡尔算法
下一篇: 多源最短路径( Floyd算法)JAVA实现
Coder_py
博客等级 码龄10年 106粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值