Меньше чем n циклов для решения «n ферзей» без использования рекурсии? - PullRequest
0 голосов
/ 16 мая 2018

Есть ли способ без использования рекурсивной функции для решения проблемы 8 ферзей, скажем, с двумя или тремя циклами? Я пытаюсь (в C) перебрать все квадраты и назначить королеву в каждом квадрате и проверить. Проблема в том, что даже итерация с циклами 64 раза не помогает, потому что для каждого назначения в данной строке я должен проверять все возможные позиции разных строк. Но у меня есть ощущение, что я могу как-то сделать это с менее чем 8 циклами. Даже если я просто хочу использовать грубую силу, я считаю, что есть способ сделать это с менее чем 8 циклами, но я не могу найти никого, кто бы говорил об этом.

Есть ли такая реализация?

Как я могу пройти через все 64 квадрата, проверяя все возможные конфигурации 8 королев или близко к нему, но не используя 8 циклов?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Отказ от ответственности: оригинальный вопрос помечен java, так что это решение Java.

Шахматная доска состоит из 64 клеток, и мы хотим разместить 8 королев, которые не могут атаковать каждогоДругой.Для быстрого поиска открытого квадрата, то есть квадрата, который не может быть атакован уже размещенными королевами, мы можем использовать 64-битную long для представления всей шахматной доски, а также использовать битовые манипуляции и Long.numberOfTrailingZeros() метод, чтобы найти открытый квадрат.

Нам нужны некоторые вспомогательные методы.Во-первых, метод маркировки квадратов, заблокированных королевой в заданной позиции.

private static long blockedSquaresWithQueenAt(int pos) {
    // Set vertical bits
    long board = 1L << (pos & 7);
    board |= board << 8;
    board |= board << 16;
    board |= board << 32;

    // Set horizontal bits
    long mask2 = 1L << (pos & ~7);
    board |= ((mask2 << 8) - 1) ^ (mask2 - 1);

    // Set diagonal bits
    for (int p = pos - 9; p >= 0 && (p & 7) != 7; p -= 9)
        board |= 1L << p;
    for (int p = pos - 7; p >= 0 && (p & 7) != 0; p -= 7)
        board |= 1L << p;
    for (int p = pos + 7; p < 64 && (p & 7) != 7; p += 7)
        board |= 1L << p;
    for (int p = pos + 9; p < 64 && (p & 7) != 0; p += 9)
        board |= 1L << p;

    return board;
}

Во-вторых, метод печати доски с необязательным маркером для одной позиции ферзя.Печать с маркером была полезна во время разработки / тестирования.

private static void printBoard(long board, int markPos) {
    for (int pos = 0; pos < 64; pos++) {
        System.out.print(pos == markPos ? '\u25CB' : (board & (1L << pos)) == 0 ? '\u00B7' : '\u25CF');
        if ((pos & 7) == 7)
            System.out.println();
        else
            System.out.print(' ');
    }
}

Вот пример того, как это работает, с ферзем в строке 2, столбце 4, иначе в позиции 20 (все на основе 0) .

printBoard(blockedSquaresWithQueenAt(20), 20);
· · ● · ● · ● ·
· · · ● ● ● · ·
● ● ● ● ○ ● ● ●
· · · ● ● ● · ·
· · ● · ● · ● ·
· ● · · ● · · ●
● · · · ● · · ·
· · · · ● · · ·

Поскольку мы хотим быстро пропустить заблокированные квадраты, используя метод numberOfTrailingZeros(), мы хотим, чтобы заблокированные квадраты были 0-битными, поэтому мы инвертируем это:

printBoard(~ blockedSquaresWithQueenAt(20), -1);
● ● · ● · ● · ●
● ● ● · · · ● ●
· · · · · · · ·
● ● ● · · · ● ●
● ● · ● · ● · ●
● · ● ● · ● ● ·
· ● ● ● · ● ● ●
● ● ● ● · ● ● ●

Это пример нашей long доски с одним ферзем.

Теперь о основной логике.Мы используем массив размером 8, чтобы при необходимости быстро возвращаться назад.Наличие массива устраняет необходимость в рекурсии.

Затем мы помещаем первую королеву (королева 0), отмечаем заблокированные квадраты, находим первый разблокированный квадрат для второй королевы и повторяем до тех пор, пока все 8 ферзей не будут размещены, возвращаясь по мере необходимости.

Когда у нас есть 8 королев, мы строим и распечатываем доску из этих 8 ферзей, а затем возвращаемся назад, чтобы найти больше решений.

private static void solve() {
    int[] posForQueen = new int[8];
    long[] board = new long[8];
    posForQueen[0] = -1;
    // Keep trying until we backtrack from queen 0
    for (int queen = 0; queen >= 0; ) {
        // Find next open square for current queen
        posForQueen[queen]++;
        if (queen != 0)
            posForQueen[queen] += Long.numberOfTrailingZeros(board[queen - 1] >>> posForQueen[queen]);
        // Backtrack if no open square found
        if (posForQueen[queen] >= 64) {
            queen--;
        } else {
            // Build new board with open squares, accounting for all queens placed so far
            board[queen] = ~ blockedSquaresWithQueenAt(posForQueen[queen]);
            if (queen > 0)
                board[queen] &= board[queen - 1];
            // Advance to next queen if there are more queens to place
            if (queen < 7) {
                posForQueen[queen + 1] = posForQueen[queen];
                queen++;
            } else {
                // Build and print board with all 8 queen positions
                long queens = 0;
                for (int i = 0; i < 8; i++)
                    queens |= 1L << posForQueen[i];
                System.out.println();
                printBoard(queens, -1);
            }
        }
    }
}

Все решения:

● · · · · · · ·
· · · · ● · · ·
· · · · · · · ●
· · · · · ● · ·
· · ● · · · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · ● · · · ·

● · · · · · · ·
· · · · · ● · ·
· · · · · · · ●
· · ● · · · · ·
· · · · · · ● ·
· · · ● · · · ·
· ● · · · · · ·
· · · · ● · · ·

● · · · · · · ·
· · · · · · ● ·
· · · ● · · · ·
· · · · · ● · ·
· · · · · · · ●
· ● · · · · · ·
· · · · ● · · ·
· · ● · · · · ·

● · · · · · · ·
· · · · · · ● ·
· · · · ● · · ·
· · · · · · · ●
· ● · · · · · ·
· · · ● · · · ·
· · · · · ● · ·
· · ● · · · · ·

· ● · · · · · ·
· · · ● · · · ·
· · · · · ● · ·
· · · · · · · ●
· · ● · · · · ·
● · · · · · · ·
· · · · · · ● ·
· · · · ● · · ·

· ● · · · · · ·
· · · · ● · · ·
· · · · · · ● ·
● · · · · · · ·
· · ● · · · · ·
· · · · · · · ●
· · · · · ● · ·
· · · ● · · · ·

· ● · · · · · ·
· · · · ● · · ·
· · · · · · ● ·
· · · ● · · · ·
● · · · · · · ·
· · · · · · · ●
· · · · · ● · ·
· · ● · · · · ·

· ● · · · · · ·
· · · · · ● · ·
● · · · · · · ·
· · · · · · ● ·
· · · ● · · · ·
· · · · · · · ●
· · ● · · · · ·
· · · · ● · · ·

· ● · · · · · ·
· · · · · ● · ·
· · · · · · · ●
· · ● · · · · ·
● · · · · · · ·
· · · ● · · · ·
· · · · · · ● ·
· · · · ● · · ·

· ● · · · · · ·
· · · · · · ● ·
· · ● · · · · ·
· · · · · ● · ·
· · · · · · · ●
· · · · ● · · ·
● · · · · · · ·
· · · ● · · · ·

· ● · · · · · ·
· · · · · · ● ·
· · · · ● · · ·
· · · · · · · ●
● · · · · · · ·
· · · ● · · · ·
· · · · · ● · ·
· · ● · · · · ·

· ● · · · · · ·
· · · · · · · ●
· · · · · ● · ·
● · · · · · · ·
· · ● · · · · ·
· · · · ● · · ·
· · · · · · ● ·
· · · ● · · · ·

· · ● · · · · ·
● · · · · · · ·
· · · · · · ● ·
· · · · ● · · ·
· · · · · · · ●
· ● · · · · · ·
· · · ● · · · ·
· · · · · ● · ·

· · ● · · · · ·
· · · · ● · · ·
· ● · · · · · ·
· · · · · · · ●
● · · · · · · ·
· · · · · · ● ·
· · · ● · · · ·
· · · · · ● · ·

· · ● · · · · ·
· · · · ● · · ·
· ● · · · · · ·
· · · · · · · ●
· · · · · ● · ·
· · · ● · · · ·
· · · · · · ● ·
● · · · · · · ·

· · ● · · · · ·
· · · · ● · · ·
· · · · · · ● ·
● · · · · · · ·
· · · ● · · · ·
· ● · · · · · ·
· · · · · · · ●
· · · · · ● · ·

· · ● · · · · ·
· · · · ● · · ·
· · · · · · · ●
· · · ● · · · ·
● · · · · · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · · · ● · ·

· · ● · · · · ·
· · · · · ● · ·
· ● · · · · · ·
· · · · ● · · ·
· · · · · · · ●
● · · · · · · ·
· · · · · · ● ·
· · · ● · · · ·

· · ● · · · · ·
· · · · · ● · ·
· ● · · · · · ·
· · · · · · ● ·
● · · · · · · ·
· · · ● · · · ·
· · · · · · · ●
· · · · ● · · ·

· · ● · · · · ·
· · · · · ● · ·
· ● · · · · · ·
· · · · · · ● ·
· · · · ● · · ·
● · · · · · · ·
· · · · · · · ●
· · · ● · · · ·

· · ● · · · · ·
· · · · · ● · ·
· · · ● · · · ·
● · · · · · · ·
· · · · · · · ●
· · · · ● · · ·
· · · · · · ● ·
· ● · · · · · ·

· · ● · · · · ·
· · · · · ● · ·
· · · ● · · · ·
· ● · · · · · ·
· · · · · · · ●
· · · · ● · · ·
· · · · · · ● ·
● · · · · · · ·

· · ● · · · · ·
· · · · · ● · ·
· · · · · · · ●
● · · · · · · ·
· · · ● · · · ·
· · · · · · ● ·
· · · · ● · · ·
· ● · · · · · ·

· · ● · · · · ·
· · · · · ● · ·
· · · · · · · ●
● · · · · · · ·
· · · · ● · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · ● · · · ·

· · ● · · · · ·
· · · · · ● · ·
· · · · · · · ●
· ● · · · · · ·
· · · ● · · · ·
● · · · · · · ·
· · · · · · ● ·
· · · · ● · · ·

· · ● · · · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · · · · · ●
· · · · ● · · ·
● · · · · · · ·
· · · ● · · · ·
· · · · · ● · ·

· · ● · · · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · · · · · ●
· · · · · ● · ·
· · · ● · · · ·
● · · · · · · ·
· · · · ● · · ·

· · ● · · · · ·
· · · · · · · ●
· · · ● · · · ·
· · · · · · ● ·
● · · · · · · ·
· · · · · ● · ·
· ● · · · · · ·
· · · · ● · · ·

· · · ● · · · ·
● · · · · · · ·
· · · · ● · · ·
· · · · · · · ●
· ● · · · · · ·
· · · · · · ● ·
· · ● · · · · ·
· · · · · ● · ·

· · · ● · · · ·
● · · · · · · ·
· · · · ● · · ·
· · · · · · · ●
· · · · · ● · ·
· · ● · · · · ·
· · · · · · ● ·
· ● · · · · · ·

· · · ● · · · ·
· ● · · · · · ·
· · · · ● · · ·
· · · · · · · ●
· · · · · ● · ·
● · · · · · · ·
· · ● · · · · ·
· · · · · · ● ·

· · · ● · · · ·
· ● · · · · · ·
· · · · · · ● ·
· · ● · · · · ·
· · · · · ● · ·
· · · · · · · ●
● · · · · · · ·
· · · · ● · · ·

· · · ● · · · ·
· ● · · · · · ·
· · · · · · ● ·
· · ● · · · · ·
· · · · · ● · ·
· · · · · · · ●
· · · · ● · · ·
● · · · · · · ·

· · · ● · · · ·
· ● · · · · · ·
· · · · · · ● ·
· · · · ● · · ·
● · · · · · · ·
· · · · · · · ●
· · · · · ● · ·
· · ● · · · · ·

· · · ● · · · ·
· ● · · · · · ·
· · · · · · · ●
· · · · ● · · ·
· · · · · · ● ·
● · · · · · · ·
· · ● · · · · ·
· · · · · ● · ·

· · · ● · · · ·
· ● · · · · · ·
· · · · · · · ●
· · · · · ● · ·
● · · · · · · ·
· · ● · · · · ·
· · · · ● · · ·
· · · · · · ● ·

· · · ● · · · ·
· · · · · ● · ·
● · · · · · · ·
· · · · ● · · ·
· ● · · · · · ·
· · · · · · · ●
· · ● · · · · ·
· · · · · · ● ·

· · · ● · · · ·
· · · · · ● · ·
· · · · · · · ●
· ● · · · · · ·
· · · · · · ● ·
● · · · · · · ·
· · ● · · · · ·
· · · · ● · · ·

· · · ● · · · ·
· · · · · ● · ·
· · · · · · · ●
· · ● · · · · ·
● · · · · · · ·
· · · · · · ● ·
· · · · ● · · ·
· ● · · · · · ·

· · · ● · · · ·
· · · · · · ● ·
● · · · · · · ·
· · · · · · · ●
· · · · ● · · ·
· ● · · · · · ·
· · · · · ● · ·
· · ● · · · · ·

· · · ● · · · ·
· · · · · · ● ·
· · ● · · · · ·
· · · · · · · ●
· ● · · · · · ·
· · · · ● · · ·
● · · · · · · ·
· · · · · ● · ·

· · · ● · · · ·
· · · · · · ● ·
· · · · ● · · ·
· ● · · · · · ·
· · · · · ● · ·
● · · · · · · ·
· · ● · · · · ·
· · · · · · · ●

· · · ● · · · ·
· · · · · · ● ·
· · · · ● · · ·
· · ● · · · · ·
● · · · · · · ·
· · · · · ● · ·
· · · · · · · ●
· ● · · · · · ·

· · · ● · · · ·
· · · · · · · ●
● · · · · · · ·
· · ● · · · · ·
· · · · · ● · ·
· ● · · · · · ·
· · · · · · ● ·
· · · · ● · · ·

· · · ● · · · ·
· · · · · · · ●
● · · · · · · ·
· · · · ● · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · · · ● · ·
· · ● · · · · ·

· · · ● · · · ·
· · · · · · · ●
· · · · ● · · ·
· · ● · · · · ·
● · · · · · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · · · ● · ·

· · · · ● · · ·
● · · · · · · ·
· · · ● · · · ·
· · · · · ● · ·
· · · · · · · ●
· ● · · · · · ·
· · · · · · ● ·
· · ● · · · · ·

· · · · ● · · ·
● · · · · · · ·
· · · · · · · ●
· · · ● · · · ·
· ● · · · · · ·
· · · · · · ● ·
· · ● · · · · ·
· · · · · ● · ·

· · · · ● · · ·
● · · · · · · ·
· · · · · · · ●
· · · · · ● · ·
· · ● · · · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · ● · · · ·

· · · · ● · · ·
· ● · · · · · ·
· · · ● · · · ·
· · · · · ● · ·
· · · · · · · ●
· · ● · · · · ·
● · · · · · · ·
· · · · · · ● ·

· · · · ● · · ·
· ● · · · · · ·
· · · ● · · · ·
· · · · · · ● ·
· · ● · · · · ·
· · · · · · · ●
· · · · · ● · ·
● · · · · · · ·

· · · · ● · · ·
· ● · · · · · ·
· · · · · ● · ·
● · · · · · · ·
· · · · · · ● ·
· · · ● · · · ·
· · · · · · · ●
· · ● · · · · ·

· · · · ● · · ·
· ● · · · · · ·
· · · · · · · ●
● · · · · · · ·
· · · ● · · · ·
· · · · · · ● ·
· · ● · · · · ·
· · · · · ● · ·

· · · · ● · · ·
· · ● · · · · ·
● · · · · · · ·
· · · · · ● · ·
· · · · · · · ●
· ● · · · · · ·
· · · ● · · · ·
· · · · · · ● ·

· · · · ● · · ·
· · ● · · · · ·
● · · · · · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · · · · · ●
· · · · · ● · ·
· · · ● · · · ·

· · · · ● · · ·
· · ● · · · · ·
· · · · · · · ●
· · · ● · · · ·
· · · · · · ● ·
● · · · · · · ·
· · · · · ● · ·
· ● · · · · · ·

· · · · ● · · ·
· · · · · · ● ·
● · · · · · · ·
· · ● · · · · ·
· · · · · · · ●
· · · · · ● · ·
· · · ● · · · ·
· ● · · · · · ·

· · · · ● · · ·
· · · · · · ● ·
● · · · · · · ·
· · · ● · · · ·
· ● · · · · · ·
· · · · · · · ●
· · · · · ● · ·
· · ● · · · · ·

· · · · ● · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · ● · · · ·
· · · · · · · ●
● · · · · · · ·
· · ● · · · · ·
· · · · · ● · ·

· · · · ● · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · · · ● · ·
· · ● · · · · ·
● · · · · · · ·
· · · ● · · · ·
· · · · · · · ●

· · · · ● · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · · · ● · ·
· · ● · · · · ·
● · · · · · · ·
· · · · · · · ●
· · · ● · · · ·

· · · · ● · · ·
· · · · · · ● ·
· · · ● · · · ·
● · · · · · · ·
· · ● · · · · ·
· · · · · · · ●
· · · · · ● · ·
· ● · · · · · ·

· · · · ● · · ·
· · · · · · · ●
· · · ● · · · ·
● · · · · · · ·
· · ● · · · · ·
· · · · · ● · ·
· ● · · · · · ·
· · · · · · ● ·

· · · · ● · · ·
· · · · · · · ●
· · · ● · · · ·
● · · · · · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · · · ● · ·
· · ● · · · · ·

· · · · · ● · ·
● · · · · · · ·
· · · · ● · · ·
· ● · · · · · ·
· · · · · · · ●
· · ● · · · · ·
· · · · · · ● ·
· · · ● · · · ·

· · · · · ● · ·
· ● · · · · · ·
· · · · · · ● ·
● · · · · · · ·
· · ● · · · · ·
· · · · ● · · ·
· · · · · · · ●
· · · ● · · · ·

· · · · · ● · ·
· ● · · · · · ·
· · · · · · ● ·
● · · · · · · ·
· · · ● · · · ·
· · · · · · · ●
· · · · ● · · ·
· · ● · · · · ·

· · · · · ● · ·
· · ● · · · · ·
● · · · · · · ·
· · · · · · ● ·
· · · · ● · · ·
· · · · · · · ●
· ● · · · · · ·
· · · ● · · · ·

· · · · · ● · ·
· · ● · · · · ·
● · · · · · · ·
· · · · · · · ●
· · · ● · · · ·
· ● · · · · · ·
· · · · · · ● ·
· · · · ● · · ·

· · · · · ● · ·
· · ● · · · · ·
● · · · · · · ·
· · · · · · · ●
· · · · ● · · ·
· ● · · · · · ·
· · · ● · · · ·
· · · · · · ● ·

· · · · · ● · ·
· · ● · · · · ·
· · · · ● · · ·
· · · · · · ● ·
● · · · · · · ·
· · · ● · · · ·
· ● · · · · · ·
· · · · · · · ●

· · · · · ● · ·
· · ● · · · · ·
· · · · ● · · ·
· · · · · · · ●
● · · · · · · ·
· · · ● · · · ·
· ● · · · · · ·
· · · · · · ● ·

· · · · · ● · ·
· · ● · · · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · ● · · · ·
· · · · · · · ●
● · · · · · · ·
· · · · ● · · ·

· · · · · ● · ·
· · ● · · · · ·
· · · · · · ● ·
· ● · · · · · ·
· · · · · · · ●
· · · · ● · · ·
● · · · · · · ·
· · · ● · · · ·

· · · · · ● · ·
· · ● · · · · ·
· · · · · · ● ·
· · · ● · · · ·
● · · · · · · ·
· · · · · · · ●
· ● · · · · · ·
· · · · ● · · ·

· · · · · ● · ·
· · · ● · · · ·
● · · · · · · ·
· · · · ● · · ·
· · · · · · · ●
· ● · · · · · ·
· · · · · · ● ·
· · ● · · · · ·

· · · · · ● · ·
· · · ● · · · ·
· ● · · · · · ·
· · · · · · · ●
· · · · ● · · ·
· · · · · · ● ·
● · · · · · · ·
· · ● · · · · ·

· · · · · ● · ·
· · · ● · · · ·
· · · · · · ● ·
● · · · · · · ·
· · ● · · · · ·
· · · · ● · · ·
· ● · · · · · ·
· · · · · · · ●

· · · · · ● · ·
· · · ● · · · ·
· · · · · · ● ·
● · · · · · · ·
· · · · · · · ●
· ● · · · · · ·
· · · · ● · · ·
· · ● · · · · ·

· · · · · ● · ·
· · · · · · · ●
· ● · · · · · ·
· · · ● · · · ·
● · · · · · · ·
· · · · · · ● ·
· · · · ● · · ·
· · ● · · · · ·

· · · · · · ● ·
● · · · · · · ·
· · ● · · · · ·
· · · · · · · ●
· · · · · ● · ·
· · · ● · · · ·
· ● · · · · · ·
· · · · ● · · ·

· · · · · · ● ·
· ● · · · · · ·
· · · ● · · · ·
● · · · · · · ·
· · · · · · · ●
· · · · ● · · ·
· · ● · · · · ·
· · · · · ● · ·

· · · · · · ● ·
· ● · · · · · ·
· · · · · ● · ·
· · ● · · · · ·
● · · · · · · ·
· · · ● · · · ·
· · · · · · · ●
· · · · ● · · ·

· · · · · · ● ·
· · ● · · · · ·
● · · · · · · ·
· · · · · ● · ·
· · · · · · · ●
· · · · ● · · ·
· ● · · · · · ·
· · · ● · · · ·

· · · · · · ● ·
· · ● · · · · ·
· · · · · · · ●
· ● · · · · · ·
· · · · ● · · ·
● · · · · · · ·
· · · · · ● · ·
· · · ● · · · ·

· · · · · · ● ·
· · · ● · · · ·
· ● · · · · · ·
· · · · ● · · ·
· · · · · · · ●
● · · · · · · ·
· · ● · · · · ·
· · · · · ● · ·

· · · · · · ● ·
· · · ● · · · ·
· ● · · · · · ·
· · · · · · · ●
· · · · · ● · ·
● · · · · · · ·
· · ● · · · · ·
· · · · ● · · ·

· · · · · · ● ·
· · · · ● · · ·
· · ● · · · · ·
● · · · · · · ·
· · · · · ● · ·
· · · · · · · ●
· ● · · · · · ·
· · · ● · · · ·

· · · · · · · ●
· ● · · · · · ·
· · · ● · · · ·
● · · · · · · ·
· · · · · · ● ·
· · · · ● · · ·
· · ● · · · · ·
· · · · · ● · ·

· · · · · · · ●
· ● · · · · · ·
· · · · ● · · ·
· · ● · · · · ·
● · · · · · · ·
· · · · · · ● ·
· · · ● · · · ·
· · · · · ● · ·

· · · · · · · ●
· · ● · · · · ·
● · · · · · · ·
· · · · · ● · ·
· ● · · · · · ·
· · · · ● · · ·
· · · · · · ● ·
· · · ● · · · ·

· · · · · · · ●
· · · ● · · · ·
● · · · · · · ·
· · ● · · · · ·
· · · · · ● · ·
· ● · · · · · ·
· · · · · · ● ·
· · · · ● · · ·
0 голосов
/ 17 мая 2018

Это возможно.Ниже приведен короткий псевдокод, действительный код C см. В https://github.com/fbergo/examples/blob/master/8q.c.

col = 1
qrow[1..8]  = {0,0,0,0,0,0,0,0}

while(true)
    if (qrow[col] == 8) {
         if (col > 1) { 
              qrow[col]=0;
              col--; 
              continue;
         } else {
              return FAIL;
         }
    } else {
       qrow[col]++;
    }

    // check if queens attack each other
    bad = 0;
    for(i=1;i<=7 && !bad;i++) {
       for(j=i+1;j<=8 &&!bad;j++) {
          if (qrow[i]!=0 && qrow[i]==qrow[j]) bad=1;
          if (qrow[i]!=0 && qrow[j]!=0 && abs(i-j)==abs(qrow[i]-qrow[j])) bad=1;
       }
    }

    if (bad) continue; // queens in conflict, can't advance to col+1
    if (col==8) return SUCCESS; // queens don't touch, 8 columns filled
    ++col; // advance to next column
}
...