// 计算源点到目标节点的最短路径 publicvoiddijkstra(int source, int target) { // 将源点加入集合 S 中 pq.offer(source); // 将源点到源点的距离初始化为 0 dist[source] = 0;
while (!pq.isEmpty()) { // 取出当前最短路径最小的节点 u intu= pq.poll(); // 如果已遍历到目标节点,就退出循环 if (u == target) { break; } // 遍历节点 u 的所有邻接节点 v for (intv=0; v < n; v++) { if (adj[u][v] == Integer.MAX_VALUE) continue; // 如果节点 v 未被访问过,并且从源点到节点 v 的距离比从源点到节点 u 再到节点 v 的距离更短 if (dist[v] > dist[u] + adj[u][v]) { // 更新源点到节点 v 的距离 dist[v] = dist[u] + adj[u][v]; // 设置节点 v 的前驱节点为 u pre[v] = u; // 将节点 v 加入集合 S 中 pq.offer(v); } } } }