Auf einem Schachbrett ist die Dame eine mächtige Figur, da ihre Platzierung viele andere Felder ausschließt. Um dies als Suchaufgabe zu formulieren, muss man zunächst genau bestimmen, welche Felder eine Dame angreift; so lassen sich Angriffe als Einschränkungen (Constraints) behandeln, die bestimmte Platzierungsmöglichkeiten ungültig machen. Dieser Ansatz ist entscheidend, da ein Lösungsalgorithmus eine mögliche Lösung schrittweise aufbauen und Teilkonfigurationen verwerfen kann, sobald sie gegen eine Regel verstoßen – anstatt erst zu warten, bis das gesamte Brett gefüllt ist.
Eine Platzierung ist nur dann gültig, wenn sich keine zwei Damen gegenseitig angreifen; das bedeutet, dass drei Bedingungen gleichzeitig erfüllt sein müssen. Zwei Damen dürfen sich weder eine Zeile noch eine Spalte noch eine Diagonale teilen.
Um diese Einschränkungen zu veranschaulichen, betrachten Sie, wie eine einzelne Dame an einer bestimmten Position die von ihr angegriffenen Felder auf einem kleinen Schachbrett markiert.
Die Einschränkungen für Zeilen und Spalten sind unmittelbar einsichtig, da jedes Feld mit demselben Zeilen- oder Spaltenindex angegriffen wird. Auch die diagonale Einschränkung folgt einem einfachen Prinzip: Felder liegen auf einer Diagonalen, wenn sich ihr Zeilen- und Spaltenindex gemeinsam ändern; eine Dame greift also Felder entlang der beiden Diagonalrichtungen an, bis der Spielfeldrand die Linie begrenzt.
Sobald die Einschränkungen geklärt sind, besteht der nächste Schritt darin, eine Darstellung zu wählen, die den schrittweisen Aufbau von Lösungskandidaten erleichtert. Eine einfache Möglichkeit ist ein eindimensionales Array, bei dem queens[row] = col gilt – das bedeutet, dass die Dame in der Zeile row in der Spalte col platziert ist. Bei dieser Darstellung ist die Zeileneinschränkung bereits durch die Konstruktion gewährleistet, da jeder Zeilenindex nur einmal vorkommt.
Das Widget veranschaulicht, wie ein bestimmtes Array einer grafisch dargestellten Spielstellung entspricht.