import java.util.*; //java实现一个图的最短路径算法 public class Test_34 { // 定义一个常量INF,表示无穷大。private static final int INF = Integer.MAX_VALUE; // 定义一个方法dijkstra,接受一个二维数组图和一个起始节点作为参数。public static void dijkstra(int[][] graph, int start) { // 获取图的顶点个数。int numVertices = graph.length; // 创建一个数组dist,用于存储从起始节点到每个节点的最短距离int[] dist = new int[numVertices]; // 创建一个数组visited,用来标记每个节点是否已经访问过。boolean[] visited = new boolean[numVertices]; // 将dist数组填充为无穷大。Arrays.fill(dist, INF); // 将起始节点到自身的距离设为0dist[start] = 0;// 利用循环来遍历每个节点。for (int i = 0; i < numVertices - 1; i++) { // 获取未访问过的节点中距禧当前节点最近的节点。int minVertex = getMinVertex(dist, visited); // 将该节点标记为已访问。visited[minVertex] = true; // 在内层循环中,遍历当前节点的邻居节点,更新到达邻居节点的最短距离。for (int j = 0; j < numVertices; j++) {if (!visited[j] && graph[minVertex][j] != 0 && dist[minVertex] != INF &&dist[minVertex] + graph[minVertex][j] < dist[j]) {dist[j] = dist[minVertex] + graph[minVertex][j];}}}printShortestPath(start, dist);} // 定义一个方法,用来获取未访问过的最近节点。private static int getMinVertex(int[] dist, boolean[] visited) {int minDist = INF;int minVertex = -1;for (int i = 0; i < dist.length; i++) {if (!visited[i] && dist[i] < minDist) {minDist = dist[i];minVertex = i;}}return minVertex;} // 定义一个方法,用来打印起始节点到各个节点的最短距离。private static void printShortestPath(int start, int[] dist) {for (int i = 0; i < dist.length; i++) {System.out.println("Shortest distance from node " + start + " to node " + i + " is: " + dist[i]);}}public static void main(String[] args) {int[][] graph = {{0, 4, 0, 0, 0, 0, 0, 8, 0},{4, 0, 8, 0, 0, 0, 0, 11, 0},{0, 8, 0, 7, 0, 4, 0, 0, 2},{0, 0, 7, 0, 9, 14, 0, 0, 0},{0, 0, 0, 9, 0, 10, 0, 0, 0},{0, 0, 4, 14, 10, 0, 2, 0, 0},{0, 0, 0, 0, 0, 2, 0, 1, 6},{8, 11, 0, 0, 0, 0, 1, 0, 7},{0, 0, 2, 0, 0, 0, 6, 7, 0}};// 初始化一个示例的图,然后调用dijkstra方法传入起始节点0dijkstra(graph, 0);} }