示例#1
0
        // koniec metody bez grafu

        public static void ProblemKomiwojazera(Graph graph, int startWierzcholek)
        {
            List <int>               odwiedzoneMiasta = new List <int>();
            List <Roads>             sciezka          = new List <Roads>();
            Dictionary <int, string> slownikMiast     = new Dictionary <int, string>();

            slownikMiast.Add(1, "Warszawa");
            slownikMiast.Add(2, "Kraków");
            slownikMiast.Add(3, "Łódź");
            slownikMiast.Add(4, "Wrocław");
            slownikMiast.Add(5, "Poznań");
            slownikMiast.Add(6, "Gdańsk");
            slownikMiast.Add(7, "Szczecin");
            slownikMiast.Add(8, "Bydgoszcz");
            slownikMiast.Add(9, "Lublin");
            slownikMiast.Add(10, "Katowice");

            Console.WriteLine("Proszę podać numer miasta z którego rozpoczyna trasę komiwojażer.");
            for (int k = 1; k <= slownikMiast.Count; k++)
            {
                Console.WriteLine("{0} - {1}", k, slownikMiast[k]);
            }
            //int miasto = Convert.ToInt32(Console.ReadLine());
            int miasto = startWierzcholek;

            Console.WriteLine("Rozpoczynam wedrowke z miasta {0}.", miasto);
            odwiedzoneMiasta.Add(miasto);
            do
            {
                Roads najblizszeMiasto = ZnajdzNajblizszeMiasto(graph, miasto, odwiedzoneMiasta, slownikMiast);
                odwiedzoneMiasta.Add(najblizszeMiasto.To);
                miasto = najblizszeMiasto.To;
                sciezka.Add(najblizszeMiasto);
            }while (odwiedzoneMiasta.Count < graph.NVerticies);
            int drogaDoPowrotu = 0;

            foreach (Edge edge in graph.Edges)
            {
                if (edge.From == odwiedzoneMiasta[odwiedzoneMiasta.Count - 1] && edge.To == odwiedzoneMiasta[0])
                {
                    drogaDoPowrotu = edge.Weight;
                }
            }
            int ostatnieMiasto = odwiedzoneMiasta[odwiedzoneMiasta.Count - 1];
            int dom            = odwiedzoneMiasta[0];

            Console.WriteLine("Powrót: {0} do miasta {1}, dlugosc drogi: {2} km", slownikMiast[ostatnieMiasto], slownikMiast[dom], drogaDoPowrotu);
            int odl = 0;

            foreach (Roads droga in sciezka)
            {
                odl += droga.HowLong;
            }
            odl += drogaDoPowrotu;
            Console.WriteLine("Calkowita przebyta droga: {0}", odl);
        }
示例#2
0
        public static Roads ZnajdzNajblizszeMiasto(Graph graph, int miasto, List <int> odwiedzoneMiasta, Dictionary <int, string> slownikMiast)
        {
            Roads drogaDoNajblizszegoMiasta = new Roads();
            int   odleglosc     = 1000000000;
            int   kolejneMiasto = miasto;
            bool  nieodwiedzone = true;

            foreach (Edge road in graph.Edges)
            {
                if (road.From == miasto)
                {
                    if (road.Weight < odleglosc && road.To != miasto)
                    {
                        foreach (int odwiedzone in odwiedzoneMiasta)
                        {
                            if (odwiedzone == road.To)
                            {
                                nieodwiedzone = false;
                            }
                        }

                        if (nieodwiedzone)
                        {
                            odleglosc     = road.Weight;
                            kolejneMiasto = road.To;
                        }
                        nieodwiedzone = true;
                    }
                }
            }
            drogaDoNajblizszegoMiasta.From    = miasto;
            drogaDoNajblizszegoMiasta.To      = kolejneMiasto;
            drogaDoNajblizszegoMiasta.HowLong = odleglosc;
            Console.WriteLine("Jestem w miescie {0}, szukam najbliższego miasta. Najblizsze miasto to {1} do ktorego jest {2} km", slownikMiast[miasto], slownikMiast[kolejneMiasto], odleglosc);
            return(drogaDoNajblizszegoMiasta);
        }
示例#3
0
        public static void ProblemKomiwojazeraBezWczytywaniaGrafu()
        {
            int[,] tabelaMiast = new int[10, 10] {
                { 0, 296, 133, 389, 311, 360, 558, 260, 168, 291 },
                { 296, 0, 262, 272, 445, 564, 645, 450, 280, 82 },
                { 133, 262, 0, 219, 201, 337, 449, 223, 287, 193 },
                { 389, 272, 219, 0, 164, 459, 377, 277, 429, 194 },
                { 311, 445, 201, 164, 0, 316, 243, 140, 467, 367 },
                { 360, 564, 337, 459, 316, 0, 366, 170, 508, 531 },
                { 558, 645, 449, 377, 243, 366, 0, 258, 711, 568 },
                { 260, 450, 223, 277, 140, 170, 258, 0, 427, 416 },
                { 168, 280, 287, 429, 467, 508, 711, 427, 0, 343 },
                { 291, 82, 193, 194, 367, 531, 568, 416, 343, 0 },
            };

            List <int>               odwiedzoneMiasta = new List <int>();
            List <Roads>             sciezka          = new List <Roads>();
            Dictionary <int, string> slownikMiast     = new Dictionary <int, string>();

            slownikMiast.Add(0, "Warszawa");
            slownikMiast.Add(1, "Kraków");
            slownikMiast.Add(2, "Łódź");
            slownikMiast.Add(3, "Wrocław");
            slownikMiast.Add(4, "Poznań");
            slownikMiast.Add(5, "Gdańsk");
            slownikMiast.Add(6, "Szczecin");
            slownikMiast.Add(7, "Bydgoszcz");
            slownikMiast.Add(8, "Lublin");
            slownikMiast.Add(9, "Katowice");

            Console.WriteLine("Proszę podać numer miasta z którego rozpoczyna trasę komiwojażer.");
            for (int k = 0; k < slownikMiast.Count; k++)
            {
                Console.WriteLine("{0} - {1}", k, slownikMiast[k]);
            }
            int miasto = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Rozpoczynam wedrowke z miasta {0}.", miasto);
            int miastoZktoregoStartuje = miasto;

            odwiedzoneMiasta.Add(miastoZktoregoStartuje);
            do
            {
                Roads drogaDoNajblizszegoMiasta = new Roads();
                int   odleglosc     = 1000000000;
                int   kolejneMiasto = miasto;
                bool  nieodwiedzone = true;

                for (int d = 0; d < tabelaMiast.GetLength(0); d++)
                {
                    if (tabelaMiast[miasto, d] < odleglosc && miasto != d)
                    {
                        foreach (int odwiedzone in odwiedzoneMiasta)
                        {
                            if (odwiedzone == d)
                            {
                                nieodwiedzone = false;
                            }
                        }

                        if (nieodwiedzone)
                        {
                            odleglosc     = tabelaMiast[miasto, d];
                            kolejneMiasto = d;
                        }
                        nieodwiedzone = true;
                    }

                    drogaDoNajblizszegoMiasta.From    = miasto;
                    drogaDoNajblizszegoMiasta.To      = kolejneMiasto;
                    drogaDoNajblizszegoMiasta.HowLong = odleglosc;
                }
                odwiedzoneMiasta.Add(drogaDoNajblizszegoMiasta.To);
                miasto = drogaDoNajblizszegoMiasta.To;
                sciezka.Add(drogaDoNajblizszegoMiasta);
                Console.WriteLine("Jestem w miescie {0}, szukam najbliższego miasta. Najblizsze miasto to {1} do ktorego jest {2} km", slownikMiast[drogaDoNajblizszegoMiasta.From], slownikMiast[drogaDoNajblizszegoMiasta.To], drogaDoNajblizszegoMiasta.HowLong);
            }while (odwiedzoneMiasta.Count < tabelaMiast.GetLength(0));
            Console.WriteLine("Powrót z {0} do {1} to odległośc {2} km.", slownikMiast[odwiedzoneMiasta.Last()], slownikMiast[miastoZktoregoStartuje], tabelaMiast[miastoZktoregoStartuje, odwiedzoneMiasta.Last()]);
        }