示例#1
0
 static void Main(string[] args)
 {
     if (args.Length == 0)
     {
         System.Console.WriteLine("Please enter a numeric argument.");
     }
     else
     {
         string plik     = args[0];
         int    pWierzch = int.Parse(args[1]);
         Graph  graf     = GraphReader.ReadWithWeight(plik);
         bool   spojny   = GraphService.SprawdzCzyGrafSpojny(graf);
         if (spojny)
         {
             // K02: Wyszukaj w grafie wszystkie wierzchołki o nieparzystych stopniach.
             GraphService.ZnajdzCyklEulera(graf, pWierzch);
             //GraphReader.SaveWithWeight(graf);
         }
         else
         {
             Console.WriteLine("Graf nie jest grafem spojnym.");
         }
         Console.ReadLine();
     }
 }
示例#2
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");
            }
        }