2. 给定带权有向图G =(V,E),其中每条边的权是非负实数。另外,还给定V中的一个顶点,称为源。现在要计算从源到其他各顶点的最短路长度。这里路的长度是指路上各边权之和。的java程序

时间: 2024-03-24 14:41:35 浏览: 12
可以使用Dijkstra算法或者Bellman-Ford算法来解决该问题。以下是使用Dijkstra算法的Java程序示例: ```java import java.util.*; public class ShortestPath { private int[] dist; private boolean[] visited; private PriorityQueue<Node> pq; private List<List<Node>> adjList; private static class Node implements Comparable<Node> { int vertex; int weight; Node(int vertex, int weight) { this.vertex = vertex; this.weight = weight; } public int compareTo(Node other) { return Integer.compare(weight, other.weight); } } public ShortestPath(int n) { dist = new int[n]; visited = new boolean[n]; pq = new PriorityQueue<Node>(); adjList = new ArrayList<List<Node>>(); for (int i = 0; i < n; i++) { dist[i] = Integer.MAX_VALUE; visited[i] = false; adjList.add(new ArrayList<Node>()); } } public void addEdge(int u, int v, int weight) { adjList.get(u).add(new Node(v, weight)); } public void dijkstra(int source) { dist[source] = 0; pq.offer(new Node(source, 0)); while (!pq.isEmpty()) { Node node = pq.poll(); int u = node.vertex; if (visited[u]) { continue; } visited[u] = true; for (Node edge : adjList.get(u)) { int v = edge.vertex; int weight = edge.weight; if (!visited[v] && dist[u] + weight < dist[v]) { dist[v] = dist[u] + weight; pq.offer(new Node(v, dist[v])); } } } } public static void main(String[] args) { ShortestPath sp = new ShortestPath(5); sp.addEdge(0, 1, 10); sp.addEdge(0, 4, 5); sp.addEdge(1, 2, 1); sp.addEdge(1, 4, 2); sp.addEdge(2, 3, 4); sp.addEdge(3, 2, 6); sp.addEdge(3, 0, 7); sp.addEdge(4, 1, 3); sp.addEdge(4, 2, 9); sp.addEdge(4, 3, 2); sp.dijkstra(0); for (int i = 0; i < 5; i++) { System.out.println("Shortest distance from source to " + i + " is " + sp.dist[i]); } } } ``` 输出结果如下: ``` Shortest distance from source to 0 is 0 Shortest distance from source to 1 is 8 Shortest distance from source to 2 is 9 Shortest distance from source to 3 is 7 Shortest distance from source to 4 is 5 ``` 该程序使用了优先队列来维护未访问的节点,并通过计算从源节点到当前节点的距离来更新最短距离数组。

相关推荐

最新推荐

recommend-type

基于HOG特征与SVM算法的图像分类 .docx

人工智能导论课作业,像分类,指在给定的类别中,选出与该图像匹配的类别作为输入的图像处理方法。支持向量机(SVM)是一种以统计学习理论为基础的用来解决二分类问题的机器学习方法。SVM是结构风险最小化模型,较好的...
recommend-type

数据结构实验报告之一元多项式求和(链表)报告2.doc

把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。 实验内容: 1.问题描述: 一元多项式求和——把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。
recommend-type

Python计算指定日期是今年的第几天(三种方法)

主要介绍了Python三种方法计算指定日期是今年的第几天,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

python根据文本生成词云图代码实例

主要介绍了python根据文本生成词云图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
recommend-type

pt100温度传感器电路图

本文将为你介绍pt100温度传感器及其应用电路图。 pt100温度传感器 pt100温度传感器是一种将温度变量转换为可传送的标准化输出信号的仪表。主要用于工业过程温度参数的测量和控制。带传感器的变送器通常由两部分...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。