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