void InOrder(Csomopont cs) { if (cs != null) { InOrder(cs.bal); Console.WriteLine(cs.tartalom); InOrder(cs.jobb); } }
void PreOrder(Csomopont cs) { if (cs != null) { Console.WriteLine(cs.tartalom); PreOrder(cs.bal); PreOrder(cs.jobb); } }
// 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(); } }
void Beszur(ref Csomopont akt, T elem, K kulcs) { if (akt == null) { akt = new Csomopont(kulcs, elem); } else { if (akt.kulcs.CompareTo(kulcs) < 0) // Ha az új elem kulcsa nagyobb mint az aktuális elem kulcsa, az elem jobb ágán haladunk tovább. Amennyiben kisebb, a baloldali ágon. { Beszur(ref akt.jobb, elem, kulcs); } else if (akt.kulcs.CompareTo(kulcs) > 0) { Beszur(ref akt.bal, elem, kulcs); } } }
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() { Queue <Csomopont> nyiltCsucsok = new Queue <Csomopont>(); List <Csomopont> zartCsucsok = new List <Csomopont>(); nyiltCsucsok.Enqueue(new Csomopont(new Allapot(), null)); while (nyiltCsucsok.Count > 0 && !nyiltCsucsok.Peek().Allapot.Celfeltetel()) { Csomopont aktualisCsomopont = nyiltCsucsok.Dequeue(); foreach (Operator op in Operatorok) { if (op.Elofeltetel(aktualisCsomopont.Allapot)) { Allapot ujAllapot = op.HuszarAthelyezes(aktualisCsomopont.Allapot); //szülő beállítása Csomopont ujCsomopont = new Csomopont(ujAllapot, aktualisCsomopont); if (!nyiltCsucsok.Contains(ujCsomopont) && !zartCsucsok.Contains(ujCsomopont)) { nyiltCsucsok.Enqueue(ujCsomopont); } } } zartCsucsok.Add(aktualisCsomopont); } if (nyiltCsucsok.Count > 0) { Csomopont celCsomopont = nyiltCsucsok.Peek(); while (celCsomopont != null) { this.Utvonal.Add(celCsomopont.Allapot); celCsomopont = celCsomopont.Szulo; } this.Utvonal.Reverse(); } }
public override void Kereses() { Stack <Csomopont> nyiltCsucsok = new Stack <Csomopont>(); List <Csomopont> zartCsucsok = new List <Csomopont>(); nyiltCsucsok.Push(new Csomopont(new Allapot(), null)); while (nyiltCsucsok.Count > 0 && nyiltCsucsok.Peek().Allapot.Celfeltetel() == false) { Csomopont aktualisCsomopont = nyiltCsucsok.Pop(); foreach (Operator op in Operatorok) { if (op.Elofeltetel(aktualisCsomopont.Allapot)) { Allapot ujAllapot = op.HuszarAthelyezes(aktualisCsomopont.Allapot); Csomopont ujCsomopont = new Csomopont(ujAllapot, aktualisCsomopont); if (nyiltCsucsok.Contains(ujCsomopont) == false && zartCsucsok.Contains(ujCsomopont) == false) { nyiltCsucsok.Push(ujCsomopont); } } } zartCsucsok.Add(aktualisCsomopont); } if (nyiltCsucsok.Count > 0) { Csomopont celCsomopont = nyiltCsucsok.Peek(); while (celCsomopont != null) { this.Utvonal.Add(celCsomopont.Allapot); celCsomopont = celCsomopont.Szulo; } this.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) { 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(); } } } }
// Keresés public override void Kereses() { Stack <Csomopont> nyiltCsucsok = new Stack <Csomopont>(); List <Csomopont> zartCsucsok = new List <Csomopont>(); nyiltCsucsok.Push(new Csomopont(new Allapot(), null)); // Meddig while (nyiltCsucsok.Count > 0 && !nyiltCsucsok.Peek().Allapot.celfeltetel()) { Csomopont aktualisCsomopont = nyiltCsucsok.Pop(); List <Csomopont> aktualisGyerekek = new List <Csomopont>(); foreach (Operator op in Operatorok) { if (op.Elofeltetel(aktualisCsomopont.Allapot)) { Allapot ujAllpot = op.BabuMozdit(aktualisCsomopont.Allapot); Csomopont ujCsomopont = new Csomopont(ujAllpot, aktualisCsomopont); if (!nyiltCsucsok.Contains(ujCsomopont) && !zartCsucsok.Contains(ujCsomopont)) { aktualisGyerekek.Add(ujCsomopont); } } } // Heurisztika alapján történő kiértékelés aktualisGyerekek.Sort( delegate(Csomopont cs1, Csomopont cs2) { if (cs1.Heurisztika > cs2.Heurisztika) { return(1); } else if (cs1.Heurisztika < cs2.Heurisztika) { return(-1); } else { return(0); } }); // Aktuális gyerekek eltárolása a nyílt csúcsokban foreach (Csomopont cs in aktualisGyerekek) { nyiltCsucsok.Push(cs); } zartCsucsok.Add(aktualisCsomopont); } // Útvonal eltárolása if (nyiltCsucsok.Count > 0) { Csomopont celCsomopont = nyiltCsucsok.Peek(); while (celCsomopont != null) { this.Utvonal.Add(celCsomopont.Allapot); celCsomopont = celCsomopont.Szulo; } this.Utvonal.Reverse(); } }