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);
                    }
                }
            }
        }