/* * Nyolc királynő probléma megoldással backtrack algoritmussal * Buta tábla, okos királynő * * Ebben a példában az algoritmus fontosabb, mint OO jelleg. */ #include <iostream> using std::cout; using std::endl; class Kiralyno { int sor; int oszlop; Kiralyno *szomszed; public: Kiralyno(int o, Kiralyno *sz): sor(1), oszlop(o), szomszed(sz) { } bool Utesben(int s, int o); bool Lep(); bool Helyezkedj(); void Kiir(); }; bool Kiralyno::Utesben(int s, int o) { int d = oszlop - o; if (sor == s || sor + d == s || sor - d == s) return true; else if (szomszed != NULL) return szomszed->Utesben(s, o); else return false; } bool Kiralyno::Lep() { if (sor < 8) { sor++; return true; } if (szomszed != NULL) { if (!szomszed->Lep()) return false; if (!szomszed->Helyezkedj()) return false; } else { return false; } sor = 1; return true; } bool Kiralyno::Helyezkedj() { while (szomszed != NULL && szomszed->Utesben(sor, oszlop)) if (!Lep()) return false; return true; } void Kiralyno::Kiir() { if (szomszed != NULL) szomszed->Kiir(); cout << (char)(oszlop-1+'A') << 9-sor << endl; } int main() { Kiralyno *babu = NULL; for (int i = 1; i <= 8; i++) { babu = new Kiralyno(i, babu); babu->Helyezkedj(); } babu->Kiir(); }