Ejemplo n.º 1
0
        // ReSharper disable once UnusedMember.Local
        private static void GraphUsageDemo()
        {
            var cities = new[]
            {
                "Seattle", "San Francisco", "Los Angeles", "Riverside", "Phoenix", "Chicago", "Boston", "New York",
                "Atlanta", "Miami", "Dallas", "Houston", "Detroit", "Philadelphia", "Washington"
            };

            var values = Enum.GetValues(typeof(City)).Cast <City>().ToList();
            var unweightedCityGraph = new UnweightedGraph <City>(values);
            var weightedCityGraph   = new WeightedGraph <City>(values);

            unweightedCityGraph.AddEdges(new List <(City first, City second)>
            {
                (City.Seattle, City.Chicago),
                (City.Seattle, City.SanFrancisco),
                (City.SanFrancisco, City.Riverside),
                (City.SanFrancisco, City.LosAngeles),
                (City.LosAngeles, City.Riverside),
                (City.LosAngeles, City.Phoenix),
                (City.Riverside, City.Philadelphia),
                (City.Riverside, City.Chicago),
                (City.Phoenix, City.Dallas),
                (City.Phoenix, City.Houston),
                (City.Dallas, City.Chicago),
                (City.Dallas, City.Atlanta),
                (City.Dallas, City.Houston),
                (City.Houston, City.Atlanta),
                (City.Houston, City.Miami),
                (City.Atlanta, City.Chicago),
                (City.Atlanta, City.Washington),
                (City.Atlanta, City.Miami),
                (City.Miami, City.Washington),
                (City.Chicago, City.Detroit),
                (City.Detroit, City.Boston),
                (City.Detroit, City.Washington),
                (City.Detroit, City.NewYork),
                (City.Boston, City.NewYork),
                (City.NewYork, City.Philadelphia),
                (City.Philadelphia, City.Washington)
            });

            weightedCityGraph.AddEdges(new List <(City first, City second, float weight)>
            {
                (City.Seattle, City.Chicago, 1737),
                (City.Seattle, City.SanFrancisco, 678),
                (City.SanFrancisco, City.Riverside, 386),
                (City.SanFrancisco, City.LosAngeles, 348),
                (City.LosAngeles, City.Riverside, 50),
                (City.LosAngeles, City.Phoenix, 357),
                (City.Riverside, City.Phoenix, 307),
                (City.Riverside, City.Chicago, 1704),
                (City.Phoenix, City.Dallas, 887),
                (City.Phoenix, City.Houston, 1015),
                (City.Dallas, City.Chicago, 805),
                (City.Dallas, City.Atlanta, 721),
                (City.Dallas, City.Houston, 225),
                (City.Houston, City.Atlanta, 702),
                (City.Houston, City.Miami, 968),
                (City.Atlanta, City.Chicago, 588),
                (City.Atlanta, City.Washington, 543),
                (City.Atlanta, City.Miami, 604),
                (City.Miami, City.Washington, 923),
                (City.Chicago, City.Detroit, 238),
                (City.Detroit, City.Boston, 613),
                (City.Detroit, City.Washington, 396),
                (City.Detroit, City.NewYork, 482),
                (City.Boston, City.NewYork, 190),
                (City.NewYork, City.Philadelphia, 81),
                (City.Philadelphia, City.Washington, 123)
            });

            Console.WriteLine(unweightedCityGraph.ToString());
            Console.WriteLine(weightedCityGraph.ToString());
            var result = weightedCityGraph.GetMinimumSpanningTree(0);

            weightedCityGraph.PrintWeightedPath(result);

            Console.WriteLine();

            var dijkstraResult = weightedCityGraph.GetDijkstraResult(City.LosAngeles);
            var nameDistance   = weightedCityGraph.DistanceArrayToDistanceMap(dijkstraResult.Distances);

            Console.WriteLine($"Distances from {nameof(City.LosAngeles)}:");
            foreach (var(name, distance) in nameDistance)
            {
                Console.WriteLine($"{name.ToString()} : {distance:F1}");
            }

            Console.WriteLine();

            Console.WriteLine($"Shortest path from {nameof(City.LosAngeles)} to {nameof(City.Boston)}");
            var path = WeightedGraph <City> .PathMapToPath(weightedCityGraph.IndexOf(City.LosAngeles),
                                                           weightedCityGraph.IndexOf(City.Boston), dijkstraResult.PathMap);

            weightedCityGraph.PrintWeightedPath(path);
        }