21xrx.com
2025-03-29 06:47:10 Saturday
文章检索 我的文章 写文章
Java实现Dijkstra算法求最短路径
2023-06-16 11:47:40 深夜i     20     0
Dijkstra算法 最短路径 Java实现 图论算法 有权图

Dijkstra算法是一种常用的图论算法,可以用于求解从一个节点到其他所有节点的最短路径。本文将介绍如何用Java语言实现Dijkstra算法,以求解有权图上的最短路径问题。

实现步骤:

1. 初始化图和距离数组

2. 将起点加入最短路径集合

3. 以已经加入最短路径集合的节点为中心,更新所有邻接节点的距离

4. 选出距离最小的未加入最短路径集合的节点,将其加入最短路径集合

5. 重复第3、4步,直到所有节点都被加入最短路径集合或者不存在未加入最短路径集合的节点

Java代码实现:

import java.util.*;
public class Dijkstra {
  public static void main(String[] args) {
    int[][] graph = { 10,
             0,
             10,
             0,
             60}; // 示例有向图
    int n = graph.length;
    int[] dis = new int[n];
    boolean[] vis = new boolean[n];
    Arrays.fill(dis, Integer.MAX_VALUE);
    dis[0] = 0;
    for (int i = 0; i < n; i++) {
      int x = -1;
      for (int j = 0; j < n; j++) {
        if (!vis[j] && (x == -1 || dis[j] < dis[x]))
          x = j;
        
      }
      vis[x] = true;
      for (int y = 0; y < n; y++) {
        if (graph[x][y] > 0 && dis[x] + graph[x][y] < dis[y]) {
          dis[y] = dis[x] + graph[x][y];
        }
      }
    }
    System.out.println(Arrays.toString(dis));
  }
}

本节介绍的示例有向图的最短路径结果为[0, 10, 50, 30, 60],表示从节点0出发到其他节点的最短路径长度分别为0、10、50、30、60。

  
  

评论区

请求出错了