public void AddConnection(Location endpoint, int weight)
        {
            this.Connections[endpoint.Name] = new Connection(endpoint, weight);

            if (!endpoint.Connections.ContainsKey(this.Name))
            {
                endpoint.AddConnection(this, weight);
            }
        }
        private static void CalculateDistanceToRest(
            Location current,
            Dictionary<string, Connection> connections,
            int currentDistance,
            HashSet<string> visited)
        {
            foreach (var name in connections.Keys)
            {
                if (visited.Contains(name))
                {
                    continue;
                }

                if (!current.ShortestDistanceTo.ContainsKey(name)
                    || (current.ShortestDistanceTo[name] >
                        (currentDistance + connections[name].Weight)))
                {
                    current.ShortestDistanceTo[name] =
                        currentDistance + connections[name].Weight;
                }

                visited.Add(name);
                CalculateDistanceToRest(current, connections[name].Endpoint.Connections, currentDistance + connections[name].Weight, visited);
                visited.Remove(name);
            }
        }
        private static Dictionary<string, Location> ParseLocations(int connections)
        {
            var locationsMap = new Dictionary<string, Location>();
            for (int i = 0; i < connections; i++)
            {
                string[] data = Console.ReadLine().Split(' ');
                if (!locationsMap.ContainsKey(data[0]))
                {
                    locationsMap[data[0]] = new Location(data[0]);
                }

                if (!locationsMap.ContainsKey(data[1]))
                {
                    locationsMap[data[1]] = new Location(data[1]);
                }

                locationsMap[data[0]].AddConnection(
                    locationsMap[data[1]], int.Parse(data[2]));
            }

            return locationsMap;
        }
 public Connection(Location endpoint, int weight)
 {
     this.Endpoint = endpoint;
     this.Weight = weight;
 }