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); }
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); } }