예제 #1
0
        public static void SprawdzCzyGrafTypuKolo(Graph graph)
        {
            bool grafTypuKolo = false;
            // pobieram wszystkie wierzcholki i sprawdzam cz jest wierzcholek ktory
            // jest polaczony z wszystkimi innymi wierzcholkami
            List <int> wierzcholkiPobranegoGrafu = GetVerticies(graph);

            int         sprawdzanyWierzcholek  = 0;
            Stack <int> sasiadujaceWierzcholki = new Stack <int>();

            foreach (int wierzcholek in wierzcholkiPobranegoGrafu)
            {
                foreach (Edge edge in graph.Edges)
                {
                    if (wierzcholek == edge.From)
                    {
                        sasiadujaceWierzcholki.Push(edge.To);
                    }

                    if (wierzcholek == edge.To)
                    {
                        sasiadujaceWierzcholki.Push(edge.From);
                    }
                }

                if (sasiadujaceWierzcholki.Count == wierzcholkiPobranegoGrafu.Count - 1)
                {
                    Console.WriteLine("Wierzcholek grafu typu kolo do usuniecia: " + wierzcholek);
                    grafTypuKolo          = true;
                    sprawdzanyWierzcholek = wierzcholek;
                }
                sasiadujaceWierzcholki.Clear();
            }

            List <Edge> tworzonyGrafCykliczny = new List <Edge>();

            // jesli jest taki wierzcholek to usuwam go i sprawdzam czy powstanie graf regularny drugiego stopnia i spojny
            if (grafTypuKolo)
            {
                Console.WriteLine("Graf jest grafem typu kolo, tworze graf cykliczny.");
                Graph grafCykliczny = UtworzGrafCykliczny(graph, sprawdzanyWierzcholek);
                GraphReader.Save(grafCykliczny, @"c.txt");
                Console.WriteLine("Zapisano utworzony graf cykliczny do pliku c.txt");
            }
        }
예제 #2
0
        static void Main(string[] args)
        {
            // K01: Sprawdz, czy graf jeste spojny. Jesli nie jest, to zakoncz algorytm z odpowiednim komunikatem.
            Graph graf   = GraphReader.ReadWithWeight(@"C:\Users\msawicki\Desktop\UZ-Informatyka\Grafy-i-sieci\Lista4\ChinesePostman\ChinesePostman\graf.txt");
            bool  spojny = GraphService.SprawdzCzyGrafSpojny(graf);

            if (spojny)
            {
                // K02: Wyszukaj w grafie wszystkie wierzchołki o nieparzystych stopniach.
                GraphService.ZnajdzCyklEulera(graf, 4);
                //GraphReader.SaveWithWeight(graf);
            }
            else
            {
                Console.WriteLine("Graf nie jeste grafem spojnym.");
            }
            Console.ReadLine();
        }