// initialisation, N = board size and #queens for i=1 to N { u_hor[i] = 0; // clear horizontal rows u_up[i] = 0; u_up[i+N] = 0; // clear upwards diagonals u_down[i] = 0; u_down[i+N] = 0; // clear downwards diagonals } col = 1; row = 0; solutions = 0; //=== main program ===== repeat { Succes = False; repeat { // find the next row for this queen (=col) row = row + 1; If (row <= N) Then Succes = Not (u_hor[row] Or u_up[row + col] Or u_down[row - col + N]); } Until Succes Or (row > N); If Succes Then { // Good place has been found for this queen - now place it ... If col <= N Then { u_hor[row] = True; // occupy this row & diagonals u_up[row + col] = True; u_down[row - col + N] = True; queen[col] = row; // store her position col = col + 1; // go to the next column with a new queen row = 0; //CountMoveAndDraw(); print this position - if you like } If col > N Then { // all queens are placed - we have a solution!!! solutions = solutions + 1; //DrawSolution(); print this solution - if you like Succes = False; // continue by rejecting this queen } } If Not Succes Then { // this queen is ready, has tried all rows - go back to the previous one col = col - 1; If col > 0 Then { row = queen[col]; u_hor[row] = False; // clear the row and diagonals of this queen u_up[row + col] = False; u_down[row - col + N] = False; } } } Until (col < 1) ; writeln(solutions + " solutions"); // // Note: Not written in any specific programming language, mixture between Pascal and Java, // to make it readable for most people