static void doSirky(uzol uzol) { var navstivene = new HashSet <String>(); var rad = new Queue <uzol>(); rad.Enqueue(uzol); var zoznam = new List <uzol>(); var counter = 1; var vsetkyUzly = 1; while (rad.Count > 0) // pokial je nieco vo fronte { uzol aktualny = null; aktualny = rad.Dequeue(); if (navstivene.Contains(aktualny.ToString())) { continue; } navstivene.Add(aktualny.ToString()); // Console.WriteLine(String.Join(",", navstivene)); // vypise co obsahuje hashset if (aktualny.vzdialenost == 0) // ak je cervene auto v cielovej pozicii { Console.WriteLine("Nasli sme riesenie:\n"); Console.WriteLine(aktualny); Console.WriteLine("Pocet spracovanych uzlov: " + counter + " Pocet rozvitych uzlov: " + vsetkyUzly); Console.WriteLine(); vypisKonecneRiesenie(aktualny); return; } counter++; // pripocitavaj stavy zakazdym, kolko operacii bolo urobenych zoznam.Clear(); zoznam.AddRange(aktualny.dalsie()); for (int i = 0; i < zoznam.Count; i++) // pridavam do radu preskumane uzly { var sused = zoznam.ElementAt(i); if (!navstivene.Contains(sused.ToString())) { rad.Enqueue(sused); vsetkyUzly++; } } aktualny.spracovany = true; // oznaci uzol za spracovany } Console.WriteLine("Riesenie neexistuje"); // Console.WriteLine(String.Join("\n", navstivene)); }
static void doHlbky(uzol uzol) { var navstivene = new HashSet <string>(); var zasobnik = new Stack <uzol>(); zasobnik.Push(uzol); var zoznam = new List <uzol>(); var counter = 1; var vsetkyUzly = 1; while (zasobnik.Count > 0) // pokial je nieco v zasobniku { uzol aktualny = null; aktualny = zasobnik.Pop(); if (navstivene.Contains(aktualny.ToString())) { continue; } navstivene.Add(aktualny.ToString()); if (aktualny.vzdialenost == 0) // ak je cervene auto v cielovej pozicii { Console.WriteLine("Nasli sme riesenie:\n"); Console.WriteLine(aktualny); Console.WriteLine("Pocet spracovanych uzlov: " + counter + " Pocet rozvitych uzlov: " + vsetkyUzly); Console.WriteLine(); vypisKonecneRiesenie(aktualny); return; } counter++; // pripocitavaj stavy zakazdym, kolko operacii bolo urobenych zoznam.Clear(); zoznam.AddRange(aktualny.dalsie()); for (int i = 0; i < zoznam.Count; i++) // pridavam do radu preskumane uzly { var sused = zoznam.ElementAt(i); if (!navstivene.Contains(sused.ToString())) { zasobnik.Push(sused); vsetkyUzly++; } } aktualny.spracovany = true; // oznaci uzol za spracovany } Console.WriteLine("Riesenie neexistuje"); }