如何使用java实现Dijkstra算法
作者:NorthPath
时间:2023-10-06
来源:互联网
浏览:0
如何使用Java实现Dijkstra算法Dijkstra算法是一种用于求解单源最短路径问题的经典算法,可以在带有非负权边的有向图中找到从一个节点到其他所有节点的最短路径。在本文中,我们将介绍如何使用Java语言实现Dijkstra算法,并给出具体的代码示例。算法原理:Dijkstra算法遵循以下步骤来计算最短路径:创建一个集合用于存放已计算出最短路径的节点;
如何使用Java实现Dijkstra算法
Dijkstra算法是一种用于求解单源最短路径问题的经典算法,可以在带有非负权边的有向图中找到从一个节点到其他所有节点的最短路径。在本文中,我们将介绍如何使用Java语言实现Dijkstra算法,并给出具体的代码示例。
- 算法原理:
Dijkstra算法遵循以下步骤来计算最短路径: - 创建一个集合用于存放已计算出最短路径的节点;
- 初始化一个数组用于存放每个节点到起始节点的最短距离,初始距离为无穷大,起始节点的距离为0;
- 选择一个没有被计算过最短路径的节点中距离起始节点最近的节点,将其加入到已计算出最短路径的集合中;
- 更新所有与新加入节点相邻的节点的最短距离。如果通过新加入节点到达相邻节点的距离比当前记录的最短距离要短,则更新最短距离;
- 重复上述步骤,直到所有节点都被计算过最短路径。
- 代码实现:
import java.util.*;
public class DijkstraAlgorithm {
private static final int INFINITE = Integer.MAX_VALUE;
public void shortestPath(int[][] graph, int start) {
int n = graph.length;
int[] distance = new int[n]; // 存放每个节点到起始节点的最短距离
boolean[] visited = new boolean[n]; // 标记节点是否被访问过
Arrays.fill(distance, INFINITE);
Arrays.fill(visited, false);
distance[start] = 0;
for (int i = 0; i < n - 1; i++) {
int minDistance = INFINITE;
int minIndex = -1;
// 选择一个没有被计算过最短路径的节点中距离起始节点最近的节点
for (int j = 0; j < n; j++) {
if (!visited[j] && distance[j] < minDistance) {
minDistance = distance[j];
minIndex = j;
}
}
visited[minIndex] = true;
// 更新所有与新加入节点相邻的节点的最短距离
for (int j = 0; j < n; j++) {
if (!visited[j] && graph[minIndex][j] != 0 && distance[minIndex] + graph[minIndex][j] < distance[j]) {
distance[j] = distance[minIndex] + graph[minIndex][j];
}
}
}
// 打印最短路径
System.out.println("节点 最短距离");
for (int i = 0; i < n; i++) {
System.out.println(i + " " + distance[i]);
}
}
public static void main(String[] args) {
int[][] graph = {
{0, 4, 0, 0, 0, 0, 0, 8, 0},
{4, 0, 8, 0, 0, 0, 0, 11, 0},
{0, 8, 0, 7, 0, 4, 0, 0, 2},
{0, 0, 7, 0, 9, 14, 0, 0, 0},
{0, 0, 0, 9, 0, 10, 0, 0, 0},
{0, 0, 4, 14, 10, 0, 2, 0, 0},
{0, 0, 0, 0, 0, 2, 0, 1, 6},
{8, 11, 0, 0, 0, 0, 1, 0, 7},
{0, 0, 2, 0, 0, 0, 6, 7, 0}
};
DijkstraAlgorithm dijkstra = new DijkstraAlgorithm();
dijkstra.shortestPath(graph, 0);
}
}- 示例说明:
上述代码实现了Dijkstra算法,并通过一个示例图进行了验证。示例图中共有9个节点,使用邻接矩阵表示图的连接关系。运行程序,将得到每个节点到起始节点的最短路径长度。
以上就是使用Java实现Dijkstra算法的具体步骤和代码示例。通过理解并运行示例代码,可以更好地掌握Dijkstra算法的实现原理和应用方法。
作者最新文章
贵州省住建厅与贝壳集团签署旅居战略合作:五大维度落地方案解析
2026-09-08 18:13
上海链家安住APP:业主主动卖房功能与成交数据解析
2026-09-08 18:11
如何批量将PPT转成PDF格式?PPT转PDF工具怎么选?
2026-09-04 16:03
PDF文件怎么压缩?3个小技巧帮你减小体积
2026-09-03 18:03
小批量试产总结报告:新产品量产导入评审实战指南
2026-09-02 19:48
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多
Windows 10
Windows
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式
Windows/macOS/Linux
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















