Загадка восьми ферзей

редактировать

abcdefgh
8Chessboard480.svg f8 белый ферзь d7 белый ферзь g6 white queen a5 белый ферзь h4 белый ферзь b3 белый ферзь e2 белый ферзь c1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Единственное симметричное решение загадки восьми ферзей (от до вращения и отражения)

Задача о восьми ферзях - это задача размещения восьми шахмат ферзей на доске 8 × 8 так, чтобы никакие две ферзя не угрожали друг другу; таким образом, решение требует, чтобы никакие две ферзя не делили одну и ту же строку, столбец или диагональ. Головоломка с восемью ферзями является примером более общей задачи n ферзей размещения n не атакующих ферзей на шахматной доске размером n × n, решения которой существуют для всех натуральных чисел n, за исключением n = 2. и n = 3.

Содержание
  • 1 История
  • 2 Построение и подсчет решений
    • 2.1 Решения
  • 3 Существование решений
  • 4 Подсчет решений
  • 5 Связанные проблемы
  • 6 Упражнение в разработке алгоритма
  • 7 Пример программы
  • 8 См. Также
  • 9 Ссылки
  • 10 Дополнительная литература
  • 11 Внешние ссылки
История

Шахматный композитор Макс Беззель опубликовал головоломку с восемью ферзями в 1848 году. Опубликовал первые решения в 1850 году. Наук также расширил головоломку до задачи n ферзей с n ферзями на шахматной доске n × n клеток.

С тех пор многие математики, в том числе Карл Фридрих Гаусс, работали как над головоломкой о восьми ферзях, так и над ее обобщенной версией n-ферзей. В 1874 г. предложил метод с использованием определителей для поиска решений. J.W.L. Глейшер усовершенствовал подход Гюнтера.

В 1972 году Эдсгер Дейкстра использовал эту задачу, чтобы проиллюстрировать мощь того, что он назвал структурным программированием. Он опубликовал очень подробное описание алгоритма depth-first поиска с возвратом.

Построение и подсчет решений

Проблема поиска всех решений проблемы 8 ферзей может быть довольно сложной. вычислительно затратно, так как существует 4 426 165 368 (т. е. 64C8 ) возможных расположений восьми ферзей на доске 8 × 8, но только 92 решения. Можно использовать ярлыки, снижающие вычислительные требования, или практические правила, позволяющие избежать вычислительных методов грубой силы. Например, применяя простое правило, ограничивающее каждого ферзя одним столбцом (или строкой), хотя оно все еще считается грубой силой, можно уменьшить количество возможных комбинаций до 16 777 216 (то есть 8) возможных комбинаций. Генерация перестановок дополнительно сокращает возможности до 40 320 (то есть 8! ), которые затем проверяются на диагональные атаки.

Решения

У загадки восьми королев есть 92 различных решения. Если решения, которые отличаются только симметрией операциями поворота и отражения доски, засчитываются как одно, головоломка имеет 12 решений. Это так называемые фундаментальные решения; представители каждого представлены ниже.

Фундаментальное решение обычно имеет восемь вариантов (включая его исходную форму), полученных путем поворота на 90, 180 или 270 ° и последующего отражения каждого из четырех вариантов поворота в зеркале в фиксированном положении. Однако, если решение эквивалентно собственному повороту на 90 ° (как это происходит с одним решением с пятью ферзями на доске 5 × 5), это фундаментальное решение будет иметь только два варианта (само и его отражение). Если решение эквивалентно собственному повороту на 180 ° (но не повороту на 90 °), у него будет четыре варианта (сам и его отражение, его поворот на 90 ° и его отражение). Если n>1, решение не может быть эквивалентным своему собственному отражению, потому что для этого потребуется, чтобы две ферзя смотрели друг на друга. Из 12 фундаментальных решений проблемы с восемью ферзями на доске 8 × 8 ровно одно (решение 12 ниже) равно его собственному повороту на 180 °, и ни одно не равно его повороту на 90 °; таким образом, количество различных решений равно 11 × 8 + 1 × 4 = 92.

Все фундаментальные решения представлены ниже:

abcdefgh
8Chessboard480.svg d8 белый ферзь g7 белый ферзь c6 белый ферзь h5 белый ферзь b4 белый ферзь e3 белый королева a2 белый ферзь f1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Решение 1
abcdefgh
8Chessboard480.svg e8 белый ферзь b7 белый ферзь d6 белый ферзь g5 белая королева c4 белая королева h3 белый ферзь f2 белый ферзь a1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Решение 2
abcdefgh
8Chessboard480.svg d8 белый ферзь b7 белый ферзь g6 white queen c5 белый ферзь f4 белый ферзь h3 белый ферзь e2 белый ферзь a1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Решение 3
abcdefgh
8Chessboard480.svg d8 белый ферзь f7 белый ферзь h6 белый ферзь c5 белый ферзь a4 white quee n g3 белый ферзь e2 белый ферзь b1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Решение 4
abcdefgh
8Chessboard480.svg c8 белый ферзь f7 белый ферзь h6 белый ферзь a5 белый ферзь d4 белый ферзь g3 белый ферзь e2 белый ферзь b1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Решение 5
abcdefgh
8Chessboard480.svg e8 белый ферзь c7 белый ферзь h6 белый ферзь d5 белый ферзь g4 белый ферзь a3 белый ферзь f2 белый ферзь b1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Решение 6
abcdefgh
8Chessboard480.svg e8 белый ферзь g7 белый ферзь d6 белый ферзь a5 белый ферзь c4 белая королева h3 белый ферзь f2 белый ферзь b1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Решение 7
abcdefgh
8Chessboard480.svg d8 белый ферзь a7 белая королева e6 белая королева h5 белый ферзь f4 белый ферзь c3 белый ферзь g2 белый ферзь b1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Решение 8
abcdefgh
8Chessboard480.svg c8 белый ферзь f7 белый ферзь d6 белый ферзь a5 белый ферзь h4 белый ферзь e3 белый королева g2 белый ферзь b1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Решение 9
abcdefgh
8Chessboard480.svg f8 белый ферзь b7 белый ферзь g6 white queen a5 белый ферзь d4 белый ферзь h3 белый ферзь e2 белый ферзь c1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Решение 10
abcdefgh
8Chessboard480.svg d8 белый ферзь g7 белый ферзь a6 белый ферзь h5 белый ферзь e4 белый ферзь b3 белый ферзь f2 белый ферзь c1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Решение 11
abcdefgh
8Chessboard480.svg f8 белый ферзь d7 белый ферзь g6 white queen a5 белый ферзь h4 белый ферзь b3 белый ферзь e2 белый ферзь c1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Решение 12

Решение 10 имеет дополнительное свойство что никакие три ферзя не находятся на прямой.

Существование решений

Эти алгоритмы грубой силы для подсчета количества решений вычислительно управляемы для n = 8, но были бы неразрешимыми для проблем n ≥ 20, как 20! = 2,433 × 10. Если цель состоит в том, чтобы найти единственное решение, можно показать, что решения существуют для всех n ≥ 4, без какого-либо поиска. Эти решения демонстрируют ступенчатые шаблоны, как в следующих примерах для n = 8, 9 и 10:

abcdefgh
8Chessboard480.svg c8 белый ферзь e7 белый ферзь b6 белый ферзь h5 белый ферзь a4 white quee n g3 белый ферзь d2 белый ферзь f1 белый ферзь 8
77
66
55
44
33
22
11
abcdefgh
Решение для лестницы для 8 ферзей
abcdefghi
9a9 b9 c9 d9 e9 f9 g9 h9 i9 белый ферзь 9
8a8 b8 c8 белый ферзь d8 e8 f8 g8 h8 i8 8
7a7 b7 c7 d7 e7 белый ферзь f7 g7 h7 i7 7
6a6 b6 белый ферзь c6 d6 e6 f6 g6 h6 i6 6
5a5 b5 c5 d5 e5 f5 g5 h5 белый ферзь i5 5
4a4 white quee n b4 c4 d4 e4 f4 g4 h4 i4 4
3a3 b3 c3 d3 e3 f3 g3 белый ферзь h3 i3 3
2a2 b2 c2 d2 белый ферзь e2 f2 g2 div class= i2 2
1a1 b1 c1 d1 e1 f1 белый ферзь g1 h1 i1 1
abcdefghi
Решение для лестницы для 9 ферзей
abcdefghij
10a10 b10 c10 d10 e10 белый ферзь f10 g10 h10 i10 j10 10
9a9 b9 c9 d9 e9 f9 g9 h9 i9 j9 белый ферзь 9
8a8 b8 c8 d8 белый ферзь e8 f8 g8 h8 i8 j8 8
7a7 b7 c7 d7 e7 f7 g7 h7 i7 белая королева j7 7
6a6 b6 c6 белый ферзь d6 e6 f6 g6 h6 i6 j6 6
5a5 b5 c5 d5 e5 f5 g5 h5 белый ферзь i5 j5 5
4a4 b4 белый ферзь c4 d4 e4 f4 g4 h4 i4 j4 4
3a3 b3 c3 d3 e3 f3 g3 белый ферзь h3 i3 j3 3
2a2 белый ферзь b2 c2 d2 e2 f2 g2 div class= i2 j2 2
1a1 b1 c1 d1 e1 f1 белый ферзь g1 h1 i1 j1 1
abcdefghij
Решение для лестницы для 10 ферзей

приведенные выше примеры могут быть получены с помощью следующих формул. Пусть (i, j) - квадрат в столбце i и строке j на шахматной доске размера n × n, k - целое число.

Один из подходов:

  1. Если остаток от деления n на 6 не равен 2 или 3, тогда список состоит из всех четных чисел, за которыми следуют все нечетные числа, не превышающие n.
  2. В противном случае, напишите отдельные списки четных и нечетных чисел (2, 4, 6, 8 - 1, 3, 5, 7).
  3. Если остаток равен 2, поменяйте местами 1 и 3 в нечетном списке и переместите 5 в конец (3, 1, 7, 5).
  4. Если остаток равен 3, переместите 2 в конец четного списка и 1,3 в конец нечетного списка (4, 6, 8, 2 - 5, 7, 1, 3 ).
  5. Добавить нечетный список к четному списку и разместить ферзей в строках, заданных этими числами, слева направо (a2, b4, c6, d8, e3, f1, g7, h5).

Для n = 8 это приводит к фундаментальному решению 1. Далее следуют еще несколько примеров.

  • 14 ферзей (остаток 2): 2, 4, 6, 8, 10, 12, 14, 3, 1, 7, 9, 11, 13, 5.
  • 15 ферзей (остаток 3): 4, 6, 8, 10, 12, 14, 2, 5, 7, 9, 11, 13, 15, 1, 3.
  • 20 ферзей (остаток 2): 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 1, 7, 9, 11, 13, 15, 17, 19, 5.
Counti ng solutions

В следующих таблицах указано количество решений для размещения n ферзей на доске n × n, как основных (последовательность A002562 в OEIS ), так и всех (последовательность A000170 в OEIS ).

<4,973,333,324
nосновнойвсе
111
200
300
412
5210
614
7640
81292
946352
1092724
113412,680
121,78714,200
139,23373,712
1445,752365,596
15285,0532,279,184
161,846,95514,772,512
1711,977,93995,815,104
1883,263,591666,090,624
19621,012,7544,968,057,848
204,878,666,80839,029,188,884
21314,666,222,712
22336,376,244,0422,691,008,701,644
233,029,242,658,21024,233,937,684,440 <5266>28,439,272,956,934227,514,171,973,736
25275,986,683,743,4342,207,893,435,808,352
262,789,712,4665648,2440,340,3165,466,510>2729,363,495,934,315,694234,907,967,154,122,528

Загадка с шестью ферзями имеет меньше решений, чем головоломка с пятью ферзями.

Нет известной формулы для точного количества решений или даже для его асимптотического поведения. Доска 27 × 27 - это доска высшего порядка, которая была полностью пронумерована.

Связанные проблемы
  • Высшие измерения
Найдите количество не атакующих ферзей, которые могут быть размещены в d-мерном пространстве. шахматы пространство размера n. Более n ферзей могут быть размещены в некоторых более высоких измерениях (самый маленький пример - четыре не атакующих ферзя в шахматном пространстве 3 × 3 × 3), и фактически известно, что для любого k существуют более высокие измерения, где n ферзей недостаточно для атаки всех клеток.
  • Использование фигур, кроме ферзей
На доске 8 × 8 можно разместить 32 коня или 14 слонов, 16 короли или восемь ладей, так что никакие две фигуры не атакуют друг друга. Феерические шахматные фигуры также были заменены на королев. В случае с рыцарями простое решение - разместить по одному на каждую клетку данного цвета, поскольку они перемещаются только к противоположному цвету. Решение также легко для ладей и королей. Восемь ладей могут быть размещены по длинной диагонали (среди тысяч других решений), а 16 королей размещаются на доске, разделив ее на 2 на 2 клетки и разместив королей в эквивалентных точках на каждой клетке.
  • Варианты шахмат
Связанные проблемы могут быть заданы для вариантов шахмат, таких как сёги. Например, задача n + k драконьих королей требует разместить k пешек сёги и n + k взаимно не атакующих драконьих королей на доске сёги n × n.
В математике матрица перестановок может рассматриваться геометрически как набор из n точек, лежащих на квадратах шахматной доски × n, так что каждая строка или столбец содержит только одну точку. Таким образом, матрица перестановок порядка n - это решение головоломки с n ладьями.
  • Нестандартные доски
Pólya изучили задачу n ферзей на тороидальном ("бублике")) и показал, что решение существует на доске n × n тогда и только тогда, когда n не делится на 2 или 3. В 2009 году Пирсон и Пирсон алгоритмически заполнили трехмерные доски (n × n × n) n ферзями, и предположил, что их кратные числа могут дать решения для четырехмерной версии головоломки.
  • Доминирование
Для доски размером n × n число доминирования - это минимальное количество ферзей (или другие фигуры), необходимые для атаки или занятия каждой клетки. Для n = 8 число доминирования ферзя равно 5.
  • Ферзь и другие фигуры
Варианты включают смешивание ферзей с другими фигурами; например, размещение m ферзей и m рыцарей на доске n × n так, чтобы ни одна фигура не атаковала другую, или размещение ферзей и пешек так, чтобы никакие две ферзя не атаковали друг друга.
В 1992 году Демирёрс, Рафраф, и Таник опубликовали метод преобразования некоторых магических квадратов в решения с n ферзей и наоборот.
В матрице размером n × n поместите каждую цифру от 1 до n в n местах матрицы, чтобы не было два экземпляра одной и той же цифры находятся в одной строке или столбце.
Рассмотрим матрицу с одним основным столбцом для каждого из n рангов доски, одним основным столбцом для каждого из n файлов и по одному второстепенному столбцу на каждую из 4n - 6 нетривиальных диагоналей доски. Матрица имеет n строк: по одной для каждого возможного размещения ферзя, и каждая строка имеет 1 в столбцах, соответствующих рангу, вертикали и диагоналям этого квадрата, и 0 во всех остальных столбцах. Тогда проблема n ферзей эквивалентна выбору подмножества строк этой матрицы, так что каждый первичный столбец имеет 1 ровно в одной из выбранных строк, а каждый вторичный столбец имеет 1 не более чем в одной из выбранных строк; это пример обобщенной задачи точное покрытие, из которых судоку является другим примером.
  • Завершение n-Queens
В статье 2017 года была исследована проблема «Учитывая n × n шахматная доска, на которой уже размещено несколько ферзей. Можете ли вы поставить ферзя в каждый оставшийся ряд, чтобы никакие две ферзя не атаковали друг друга? " и несколько связанных проблем. Авторы утверждают, что эти задачи являются NP-завершенными и # P-complete.
Упражнения по разработке алгоритмов

Нахождение всех решений загадки восьми ферзей является хорошим примером простая, но нетривиальная проблема. По этой причине он часто используется в качестве примера проблемы для различных методов программирования, включая нетрадиционные подходы, такие как программирование с ограничениями, логическое программирование или генетические алгоритмы. Чаще всего он используется в качестве примера проблемы, которую можно решить с помощью рекурсивного алгоритма, индуктивно формулируя задачу n ферзей в терминах добавления одного ферзя к любому решению. к задаче о размещении n - 1 ферзей на шахматной доске n × n. Индукция завершается решением «проблемы» размещения 0 ферзей на шахматной доске, которая является пустой шахматной доской.

Этот метод может использоваться гораздо более эффективно, чем наивный алгоритм перебора, который учитывает все 64 = 2 = 281 474 976 710 656 возможных слепых размещений восьми ферзей, и затем фильтрует их, чтобы удалить все размещения, которые размещают двух ферзей либо на одном поле (оставляя только 64! / 56! = 178 462 987 637 760 возможных размещений) или во взаимно атакующих позициях. Этот очень плохой алгоритм, помимо прочего, будет давать одни и те же результаты снова и снова во всех различных перестановках назначений восьми ферзей, а также повторять одни и те же вычисления снова и снова для различные подмножества каждого решения. Более совершенный алгоритм прямого перебора размещает по одному ферзю в каждом ряду, что приводит только к 8 = 2 = 16 777 216 блайндам.

Можно сделать гораздо лучше. Один алгоритм решает загадку с восемью ладьями, генерируя перестановки чисел от 1 до 8 (из которых 8! = 40,320), и использует элементы каждой перестановки в качестве индексов для размещения ферзя в каждом ряду.. Затем он отбрасывает доски с диагональными атакующими позициями. Программа backtracking поиск в глубину, небольшое улучшение метода перестановки, строит дерево поиска , рассматривая одну строку доски за раз, исключая большинство нерешенных позиций на очень ранней стадии их построения. Поскольку он отклоняет ладьи и диагональные атаки даже на неполных досках, он проверяет только 15 720 возможных размещений ферзя. Дальнейшее усовершенствование, которое исследует только 5508 возможных размещений маток, состоит в объединении метода на основе перестановок с методом раннего отсечения: перестановки генерируются в глубину, а пространство поиска сокращается, если частичная перестановка дает диагональная атака. Программирование ограничений также может быть очень эффективным для решения этой проблемы.

мин-конфликты решение для 8 ферзей

Альтернативой исчерпывающему поиску является алгоритм «итеративного восстановления», который обычно начинается со всех ферзей на доске, например, с одного ферзя на столбец. Затем он подсчитывает количество конфликтов (атак) и использует эвристику, чтобы определить, как улучшить размещение ферзей. Эвристика «минимальные конфликты » - перемещение фрагмента с наибольшим числом конфликтов в квадрат в том же столбце, где число конфликтов наименьшее - особенно эффективен: он находит решение проблемы 1 000 000 ферзей в среднем менее чем за 50 шагов. Это предполагает, что первоначальная конфигурация «достаточно хороша» - если миллион ферзей начинаются в одном ряду, потребуется не менее 999 999 шагов, чтобы исправить это. «Достаточно хорошую» отправную точку можно найти, например, поместив каждого ферзя в отдельный ряд и столбец так, чтобы он конфликтовал с наименьшим количеством ферзей, уже находящихся на доске.

В отличие от поиска с возвратом, описанного выше, итеративное восстановление не гарантирует решения: как и все жадные процедуры, оно может застрять на локальном оптимуме. (В таком случае алгоритм может быть перезапущен с другой начальной конфигурацией.) С другой стороны, он может решать задачи, размер которых на несколько порядков выходит за рамки поиска в глубину.

Eight-queens-animation.gif

Эта анимация иллюстрирует возврат для решения проблемы. Ферзь помещается в колонну, которая заведомо не вызывает конфликта. Если столбец не найден, программа возвращается в последнее хорошее состояние и затем пробует другой столбец.

В качестве альтернативы отслеживанию с возвратом решения можно подсчитывать путем рекурсивного перечисления допустимых частичных решений по одной строке за раз. Блокированные диагонали и столбцы отслеживаются с помощью побитовых операций, вместо того, чтобы строить позиции целиком. Это не позволяет восстанавливать отдельные решения.

Пример программы

Ниже приводится программа Pascal, созданная Никлаусом Виртом в 1976 году. одно решение проблемы восьми ферзей.

программа 8queen1 (вывод); var i: целое число; q: логический; a: массив [1.. 8] логических значений; b: массив [2.. 16] логических значений; c: массив [-7.. 7] логических значений; x: массив [1.. 8] целых чисел; процедура try (i: integer; var q: boolean); var j: целое число; начало j: = 0; повторить j: = j + 1; q: = ложь; если a [j] и b [i + j] и c [i - j], то begin x [i]: = j; a [j]: = ложь; b [i + j]: = ложь; c [i - j]: = ложь; if i < 8 then begin try( i + 1, q); if not q then begin a[ j] := true; b[ i + j] := true; c[ i − j] := true; end end else q := true end until q or (j = 8); end; begin for i := 1 to 8 do a[ i] := true; for i := 2 to 16 do b[ i] := true; for i := −7 to 7 do c[ i] := true; try( 1, q); if q then for i := 1 to 8 do write( x[ i]:4); writeln end.
См. также
Ссылки
Дополнительная литература
Внешние ссылки
В Wikibook Реализация алгоритма есть страница по теме: Задача N-королев
Последняя правка сделана 2021-05-18 09:28:31
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте