Пример #1
0
        public static List <int> DFS(List <wierzcholek> lista, int start)
        {
            List <int> rozwiazanie = new List <int>();
            List <int> stos        = new List <int>();

            stos.Add(start);
            rozwiazanie.Add(start);
            wybierzWierzcholek(lista, start).odwiedz();
            while (stos.Count > 0)
            {
                wierzcholek obecny   = wybierzWierzcholek(lista, stos.Last());
                List <int>  sasiedzi = obecny.dajSasiadow();
                bool        znalazl  = false;
                foreach (int i in sasiedzi)
                {
                    wierzcholek nowy = wybierzWierzcholek(lista, i);
                    if (nowy.CzyOdwiedzony() == false)
                    {
                        znalazl = true;
                        nowy.odwiedz();
                        stos.Add(nowy.dajNumer());
                        rozwiazanie.Add(nowy.dajNumer());
                        break;
                    }
                }
                if (znalazl == false)
                {
                    stos.Remove(stos.Last());
                }
            }
            return(rozwiazanie);
        }
Пример #2
0
        public static bool czyCykl(List <wierzcholek> drzewo, int i)
        {
            foreach (wierzcholek w in drzewo)
            {
                w.odznacz();
            }
            List <int> kolejka = new List <int>();

            kolejka.Add(i);
            int ileWiezcholkow = 0;
            int ileKrawedzi    = 0;

            while (kolejka.Count != 0)
            {
                wierzcholek sprawdzany = wybierzWierzcholek(drzewo, kolejka.ElementAt(0));
                if (sprawdzany.CzyOdwiedzony() == false)
                {
                    ileWiezcholkow++;
                    ileKrawedzi += sprawdzany.dajSasiadow().Count;
                    foreach (int x in sprawdzany.dajSasiadow())
                    {
                        kolejka.Add(x);
                    }
                    sprawdzany.odwiedz();
                }
                kolejka.Remove(kolejka.ElementAt(0));
            }
            ileKrawedzi = ileKrawedzi / 2;
            ileWiezcholkow--;
            if (ileWiezcholkow == ileKrawedzi)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }