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算法来求解有向图中两点之间的最短路径。希望本文对您有所帮助,谢谢阅读!