Java有向图算法之求两点之间的最短路径

在计算机科学中,有向图是由一组节点和连接这些节点的有向边组成的数据结构。有向图中的每个边都有一个方向,从一个节点指向另一个节点。其中,最短路径算法是解决从一个节点到另一个节点的最短路径的问题。

Dijkstra算法

Dijkstra算法是一种用于求解有向图中两点间最短路径的算法。该算法基于贪心策略,每次选择当前点到起点的最短路径进行拓展,直到找到目标点为止。接下来我们用Java代码实现Dijkstra算法,求解有向图中两点之间的最短路径。

代码示例

public class DijkstraAlgorithm {
    public int dijkstra(int[][] graph, int start, int end) {
        int n = graph.length;
        int[] dist = new int[n];
        Arrays.fill(dist, Integer.MAX_VALUE);
        dist[start] = 0;
        
        PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> dist[a] - dist[b]);
        pq.offer(start);
        
        while (!pq.isEmpty()) {
            int u = pq.poll();
            for (int v = 0; v < n; v++) {
                if (graph[u][v] > 0 && dist[u] + graph[u][v] < dist[v]) {
                    dist[v] = dist[u] + graph[u][v];
                    pq.offer(v);
                }
            }
        }
        
        return dist[end];
    }
}

流程

flowchart TD;
    Start(开始) --> InputGraph(输入有向图);
    InputGraph --> InputStart(输入起点和终点);
    InputStart --> Run(Dijkstra算法求最短路径);
    Run --> Output(输出最短路径);
    Output --> End(结束);

表格

起点 终点 最短路径
4 11
2 3 5
1 2 8

通过以上代码示例和流程图,我们可以了解到如何使用Dijkstra算法来求解有向图中两点之间的最短路径。希望本文对您有所帮助,谢谢阅读!