Я читаю описание решения загадки N-Queens на SICP и не могу понять большинство из них. Вот решение:
Один из способов решить загадку - работать по всем направлениям, помещая ферзя в каждый столбец. После того, как мы разместили k - 1 ферзей, мы должны поместить k-го ферзя в позицию, где она не проверяет ни одну из ферзей, уже находящихся на доске. Мы можем сформулировать этот подход рекурсивно: предположим, что мы уже сгенерировали последовательность всех возможных способов разместить k - 1 ферзей в первых k - 1 столбцах доски. Для каждого из этих способов сгенерируйте расширенный набор позиций, поместив ферзя в каждую строку k-го столбца. Теперь отфильтруйте их, оставив только те позиции, в которых ферзь в k-м столбце безопасен по отношению к другим ферзям. Это дает последовательность всех способов разместить k ферзей в первых k столбцах. Продолжая этот процесс, мы создадим не только одно решение, но и все решения головоломки.
Предположим, что шахматная доска 8 на 8 выглядит так: Мои глаза разрушены, поэтому я не могу использовать картинки. 0 означает отсутствие ферзя, 1 означает ферзя.
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
работайте по доске, помещая ферзя в каждый столбец.
Насколько я понимаю, столбцы читаются по вертикали, а строки - по горизонтали. Означает ли текст что-то подобное?
1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 0
Я поместил ферзя в каждый столбец, но никакие строки не указаны, но, поскольку это делается рекурсивно, я предполагаю, что я уже сгенерировал способы позиций, в которых два ферзя не находятся под контролем друг от друга.
Предположим, что мы уже сгенерировали последовательность всех возможных способов разместить k - 1 ферзей в первых k - 1 столбцах доски.
Скажем, k = 1. Итак, 1-1 = столбец 0, у которого есть один способ генерации позиций, потому что это пустая доска.
Для каждого из этих способов сгенерируйте расширенный набор позиций, поместив ферзя в каждую строку k-го столбца.
Мое решение для столбца 0 - 1 способ, но я абсолютно не понимаю, что означает следующее.
сгенерируйте расширенный набор позиций, поместив ферзя в каждую строку k-го столбца.
Что означает «создание расширенного набора позиций» и размещение ферзя в каждой строке столбца? Так ли это, если k = 1?
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
Но тогда все ферзи небезопасны, потому что все они находятся в одних и тех же столбцах, верно?
Я совершенно не понимаю, как действовать дальше. Может кто-то объяснить это мне?
Примечание. Если вы хотите дать визуальное объяснение, предоставьте также текстовое объяснение, потому что я не вижу изображений и изображений. Спасибо