// Keresés public override void Kereses() { Allapot kezdoAllapot = new Allapot(); List <Allapot> ut = new List <Allapot>(); ut.Add(kezdoAllapot); Random random = new Random(); // Meddig while (!ut.Last().celfeltetel()) { int randomIndex = random.Next(0, Operatorok.Count); Operator valasztottOperator = Operatorok[randomIndex]; if (valasztottOperator.Elofeltetel(ut.Last())) { Allapot ujAllapot = valasztottOperator.BabuMozdit(ut.Last()); ut.Add(ujAllapot); } } // Állapotok hozzáadása az útvonalhoz foreach (Allapot allapot in ut) { Utvonal.Add(allapot); } }
// Keresés public override void Kereses() { Stack <Csomopont> ut = new Stack <Csomopont>(); ut.Push(new Csomopont(new Allapot(), 0)); int szamlalo = 0; // Meddig while (ut.Count > 0 && ut.Peek().Allapot.celfeltetel() == false) { Csomopont aktualisCsomopont = ut.Peek(); if (aktualisCsomopont.OperatorIndex < Operatorok.Count) { Operator aktualisOperator = Operatorok[aktualisCsomopont.OperatorIndex]; if (aktualisOperator.Elofeltetel(aktualisCsomopont.Allapot)) { Allapot ujAllapot = aktualisOperator.BabuMozdit(aktualisCsomopont.Allapot); Csomopont ujCsomopont = new Csomopont(ujAllapot, 0); if (ut.Contains(ujCsomopont) == false) { ut.Push(ujCsomopont); } } aktualisCsomopont.OperatorIndex++; } else { // visszalépés szamlalo++; ut.Pop(); } } // Útvonal eltárolása if (ut.Count > 0) { foreach (Csomopont csomopont in ut) { Utvonal.Add(csomopont.Allapot); } Utvonal.Reverse(); } }
public override void Kereses() { Stack <Csomopont> ut = new Stack <Csomopont>(); ut.Push(new Csomopont(new Allapot(), 0)); int szamlalo = 0; while (ut.Count > 0 && ut.Peek().Allapot.Celfeltetel() == false) { Csomopont aktualisCsomopont = ut.Peek(); if (aktualisCsomopont.OperatorIndex < Operatorok.Count) { Operator aktualisOperator = Operatorok[aktualisCsomopont.OperatorIndex]; if (aktualisOperator.Elofeltetel(aktualisCsomopont.Allapot)) { Allapot ujAllapot = aktualisOperator.HuszarAthelyezes(aktualisCsomopont.Allapot); Csomopont ujCsomopont = new Csomopont(ujAllapot, 0); if (ut.Contains(ujCsomopont) == false) { ut.Push(ujCsomopont); } } aktualisCsomopont.OperatorIndex++; } else { szamlalo++; ut.Pop(); } } if (ut.Count > 0) { foreach (Csomopont csomopont in ut) { Utvonal.Add(csomopont.Allapot); } Utvonal.Reverse(); } }
public override void Kereses() { Stack <Csomopont> ut = new Stack <Csomopont>(); Csomopont kezdoAllapot = new Csomopont(new Allapot(), 0); ut.Push(kezdoAllapot); bool feketeLepet = true; while (ut.Count > 0 && !ut.Peek().Allapot.celFeltetel()) { Csomopont aktualisCsomopont = ut.Peek(); if (this.operatorok.Count > aktualisCsomopont.Index) { Operator aktualisOperator = operatorok[aktualisCsomopont.Index]; if (aktualisOperator.Elofeltetel(aktualisCsomopont.Allapot, feketeLepet)) { feketeLepet = aktualisCsomopont.Allapot.Babuk[operatorok[aktualisCsomopont.Index].Melyiket].SzinFekete; Allapot ujAllapot = aktualisOperator.Mozgatas(aktualisCsomopont.Allapot); Csomopont ujCsomopont = new Csomopont(ujAllapot, 0); if (!ut.Contains(ujCsomopont)) { ut.Push(ujCsomopont); } } aktualisCsomopont.Index++; } else { ut.Pop(); } } for (int i = 0; i < ut.Count; i++) { Utvonal.Add(ut.ElementAt(i).Allapot); //Console.WriteLine(ut.ElementAt(i)); } Utvonal.Reverse(); //Console.WriteLine(Utvonal.Count); }
public override void Kereses() { Stack <Csomopont> ut = new Stack <Csomopont>(); Csomopont kezdoAllapot = new Csomopont(new Allapot(), 0); ut.Push(kezdoAllapot); bool feketeLepet = true; while (ut.Count > 0) { Csomopont aktualisCsomopont = ut.Peek(); //55 ször fut le if (this.operatorok.Count > aktualisCsomopont.Index) { //54 szer fur fut le //Eddig jónak tűnik mert az operatorok száma 54 (6*9) és úgy kezdi össze hasonlítani //Fura sokkal kevesebbszer futt le a cw mint az órai kódban Operator aktualisOperator = operatorok[aktualisCsomopont.Index]; if (aktualisOperator.Elofeltetel(aktualisCsomopont.Allapot, feketeLepet)) { feketeLepet = aktualisCsomopont.Allapot.Babuk[operatorok[aktualisCsomopont.Index].Melyiket].SzinFekete; //operatorok[aktualisCsomopont.Index]. //this.elötteMozgatottSzine = aktualisOperator.; // itt valamiért felül lesz írva az aktuális csomopont szerintem memória címzési hiba Allapot ujAllapot = aktualisOperator.Mozgatas(aktualisCsomopont.Allapot); Csomopont ujCsomopont = new Csomopont(ujAllapot, 0); //!ut.Contains(ujCsomopont) valamiért false lesz és a utvonal .count nem nő if (!ut.Contains(ujCsomopont) && (Utvonal.Count == 0 || ut.Count < Utvonal.Count)) { //miért nem pushol elemet bele soha ? ut.Push(ujCsomopont); Console.WriteLine("Pusholtam az uj csomopontot"); } else { Console.WriteLine("NEM Pusholtam "); } } //else //{ // Console.WriteLine( "elbuktam az előfeltételt"); //} aktualisCsomopont.Index++; } else { Csomopont torol = ut.Pop(); } //megvizsgálom az a célfeltétel ahol vagyok if (ut.Count > 0 && ut.Peek().Allapot.celFeltetel()) { Console.WriteLine(""); //megvizsgálom hogy rividebbet találtam e //Console.WriteLine("1.if"); if (Utvonal.Count == 0 || ut.Count < Utvonal.Count) { //Console.WriteLine("2.if"); Utvonal.Clear(); for (int i = 0; i < ut.Count; i++) { Utvonal.Add(ut.ElementAt(i).Allapot); Console.WriteLine("hozzá adtam egy útvonalat"); } Utvonal.Reverse(); } } } }