21xrx.com
2024-12-22 23:19:45 Sunday
登录
文章检索 我的文章 写文章
Java实现最短路径算法 代码详解
2023-06-16 15:56:59 深夜i     --     --
Java 最短路径算法 Dijkstra算法 代码实现 优先队列

文章:

最短路径算法是图论中的基础问题,它有着广泛的应用,如在网络路由、交通运输等领域都有着很重要的作用。Java是一种流行的编程语言,在这篇文章中,我们将会讨论如何用Java实现最短路径算法,并附上具体的代码实现。

在Java中,最短路径算法的实现有多种选择,如Dijkstra算法、Bellman-Ford算法、Floyd算法等。这些算法各有优劣,具体使用要根据实际情况进行选择。在这里我们先介绍Dijkstra算法的实现过程。

1. 首先需要明确要求解的问题,即给定一个带权有向图G,求从G中的一个起点s到所有其他点的最短路径长度。

2. Dijkstra算法的基本思想是从起点s开始,维护一个到各个顶点的最短距离数组dist[],并逐渐扩展路径,同时更新最短距离数组dist[],直到扩展到所有顶点为止。

3. 具体实现过程如下:

- 初始化dist[]数组,起点s的dist[s]=0,其他顶点的dist[i]=+∞。

- 建立一个优先队列pq,将起点s加入队列,即pq.add(s)。

- 当队列pq不为空时,取出队列中的最小元素u。

- 遍历u的所有邻居v,如果dist[v]>dist[u]+w(u,v),则更新dist[v]的值,并将v加入队列pq中。

代码如下:


public int[] dijkstra(int[][] graph, int start) {

  int n = graph.length;

  int[] dist = new int[n]; // 记录到起点的最短距离

  Arrays.fill(dist, Integer.MAX_VALUE);

  dist[start] = 0;

  PriorityQueue pq = new PriorityQueue<>();

  pq.add(start);

  while (!pq.isEmpty()) {

    int u = pq.poll();

    for (int v = 0; v < n; v++) {

      if (graph[u][v] > 0 && dist[v] > dist[u] + graph[u][v]) {

        dist[v] = dist[u] + graph[u][v];

        pq.add(v);

      }

    }

  }

  return dist;

}

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复