public Connection(Node toNode, long distance) { this.ToNode = toNode; this.Distance = distance; }
static void Dijkstra(Dictionary<Node, List<Connection>> map, Node source) { PriorityQueue<long, Node> queue = new PriorityQueue<long, Node>(); foreach (var node in map) { node.Key.DijkstraDistance = long.MaxValue; } source.DijkstraDistance = 0; queue.Enqueue(source.DijkstraDistance, source); while (queue.Count > 0) { Node currentNode = queue.Dequeue().Value; if (currentNode.DijkstraDistance == long.MaxValue) { break; } foreach (var connection in map[currentNode]) { var distance = currentNode.DijkstraDistance + connection.Distance; if (distance < connection.ToNode.DijkstraDistance) { connection.ToNode.DijkstraDistance = distance; queue.Enqueue(connection.ToNode.DijkstraDistance, connection.ToNode); } } } }