Dijkstra java
时间: 2023-11-12 14:59:50 浏览: 76
Dijkstra算法是一种用于解决带权有向图或无向图的单源最短路径问题的算法。它采用了广度优先搜索的思想,每次找到当前节点到其他节点的最短路径,并标记已经访问过的节点,直到找到目标节点或者遍历完所有节点。在Java中,可以使用邻接矩阵或邻接表来表示图,并使用优先队列来实现Dijkstra算法。
以下是一个使用邻接矩阵实现Dijkstra算法的Java代码示例:
```java
import java.util.Arrays;
import java.util.PriorityQueue;
public class Dijkstra {
public static void dijkstra(int[][] graph, int start) {
int n = graph.length;
int[] dist = new int[n];
boolean[] visited = new boolean[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();
if (visited[u]) continue;
visited[u] = true;
for (int v = 0; v < n; v++) {
if (graph[u][v] > 0 && !visited[v]) {
int newDist = dist[u] + graph[u][v];
if (newDist < dist[v]) {
dist[v] = newDist;
pq.offer(v);
}
}
}
}
System.out.println(Arrays.toString(dist));
}
public static void main(String[] args) {
int[][] graph = {
{0, 10, 0, 30, 100},
{0, 0, 50, 0, 0},
{0, 0, 0, 0, 10},
{0, 0, 20, 0, 60},
{0, 0, 0, 0, 0}
};
dijkstra(graph, 0);
}
}
```
阅读全文