|
|
@ -10,15 +10,17 @@ public class Code06_Dijkstra {
|
|
|
|
public static HashMap<Node, Integer> dijkstra1(Node from) {
|
|
|
|
public static HashMap<Node, Integer> dijkstra1(Node from) {
|
|
|
|
HashMap<Node, Integer> distanceMap = new HashMap<>();
|
|
|
|
HashMap<Node, Integer> distanceMap = new HashMap<>();
|
|
|
|
distanceMap.put(from, 0);
|
|
|
|
distanceMap.put(from, 0);
|
|
|
|
|
|
|
|
// 打过对号的点
|
|
|
|
HashSet<Node> selectedNodes = new HashSet<>();
|
|
|
|
HashSet<Node> selectedNodes = new HashSet<>();
|
|
|
|
Node minNode = getMinDistanceAndUnselectedNode(distanceMap, selectedNodes);
|
|
|
|
Node minNode = getMinDistanceAndUnselectedNode(distanceMap, selectedNodes);
|
|
|
|
while (minNode != null) {
|
|
|
|
while (minNode != null) {
|
|
|
|
|
|
|
|
// 原始点 -> minNode(跳转点) 最小距离distance
|
|
|
|
int distance = distanceMap.get(minNode);
|
|
|
|
int distance = distanceMap.get(minNode);
|
|
|
|
for (Edge edge : minNode.edges) {
|
|
|
|
for (Edge edge : minNode.edges) {
|
|
|
|
Node toNode = edge.to;
|
|
|
|
Node toNode = edge.to;
|
|
|
|
if (!distanceMap.containsKey(toNode)) {
|
|
|
|
if (!distanceMap.containsKey(toNode)) {
|
|
|
|
distanceMap.put(toNode, distance + edge.weight);
|
|
|
|
distanceMap.put(toNode, distance + edge.weight);
|
|
|
|
} else {
|
|
|
|
} else { // toNode
|
|
|
|
distanceMap.put(edge.to, Math.min(distanceMap.get(toNode), distance + edge.weight));
|
|
|
|
distanceMap.put(edge.to, Math.min(distanceMap.get(toNode), distance + edge.weight));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|