- Задача «8 ферзей»
- Полезные советы или в поисках решения
- Тренируемые навыки
- Отзывы и комментарии
- Количество расстановок N ферзей на шахматной доске N×N
- Решение
- 8 ферзей на шахматной доске
- Допустимые варианты решения
- Как расставить 8 ферзей на доске
- Задача о восьми ферзях
- Содержание
- Формулировка [ ]
- Вариант решения для доски произвольного размера на C# [ ]
- Время выполнения алгоритма [ ]
- Вариант решения для доски произвольного размера на C [ ]
- Время выполнения алгоритма [ ]
- Вариант решения для доски размера до 10-11 на Oracle 11 SQL [ ]
- Рекурсивное решение для доски произвольного размера на C++ [ ]
- Альтернативный подход [ ]
Задача «8 ферзей»
«8 ферзей» – отличная задача-головоломка для развития логического мышления. Эта online флеш-игра является своеобразной современной формулировкой известной шахматной задачи, придуманной шахматистом Максом Базелем в 1848 г.
Любители шахмат наверняка слышали об этой самой популярной математической игре на шахматной доске. Поиск ответа на вопрос о том, как же все-таки расставить 8 ферзей в этой задаче, будет полезным для всех, кто хочет развивать свои интеллектуальные способности, находить решения нестандартных задач, продумывать ходы в поисках ответа.
Правила. Задача о 8 ферзях имеет своим единственным условием задание расставить на стандартной шахматной доске (64 клетки, 8х8) 8 фигур – ферзей, (или королев, если угодно), таким образом, чтоб ни одна из них не была под боем другой.
Вспоминается фраза из «Трех мушкетеров» Дюма, отпущенная Ришелье во время игры в шахматы с д’Артаньяном: «Это королева, она ходит как угодно». Эта цитата хоть в конкретном случае и была двойственной, но все же она для тех, кто незнаком с правилами игры в шахматы. Уточним, что ферзь ходит на любое поле по вертикали, горизонтали и диагонали, на любые расстояния.
Полезные советы или в поисках решения
Всего оригинальных решений 12. Общее количество возможных (с учетом применения операции симметрии) вариантов – 92. Первым опубликовал ответ на эту задачу в 1850 г. Франц Нак. С тех пор многие ученые решали и исследовали эту задачу, предлагая собственные варианты решения. Так, известный немецкий математик, механик и физик Карл Гаусс очень любил эту головоломку и находил 72 варианта возможной расстановки. Он творчески подошел к процессу поиска ответа – разные комбинации 8 ферзей достигались с помощью интересного приёма… поворота доски на 90, 180 и 270 градусов соответственно. Такое вот нетривиальное решение этой головоломки.
Задача достаточно сложная, но как минимум один вариант как правильно расставить ферзей находится довольно быстро и называется явным. Самое популярное правильное расположение достигается следующей расстановкой ферзей: a2, b4, c6, d8, e3, f1, g7, h5. Схема данной расстановки изображена на первом рисунке, оставшиеся три способа расставить ферзей были найдены при вращении шахматной доски.
Другие комбинации постарайтесь найти самостоятельно. Успехов!
Тренируемые навыки
При поиске ответа на задачу тренируются следующие навыки:
- творческое мышление – способность находить нестандартные решения интеллектуальных задач, действовать не на основе изобретенного алгоритма, адаптивно ведя поиск ответа;
- память и внимание – вид умственной деятельности и избирательное направление восприятия, без которых концентрация на предмете невозможна;
- логическое мышление – вид мыслительного процесса, при котором знание достигается путем применения в рассуждении понятий и логических конструкций.
Любите подобные загадки, игры, головоломки и тесты? Получите неограниченный доступ ко всем интерактивным материалам на сайте, чтобы развиваться эффективнее.
Отзывы и комментарии
Желающие познакомится с основами решения этой задачи в математической комбинаторике и программировании могут прочитать статью в Википедии. Своими успехами, найденными вариантами расстановки и мыслями о данной игре вы можете поделиться ниже.
Источник
Количество расстановок N ферзей на шахматной доске N×N
Требуется подсчитать количество расстановок N ферзей на шахматной доске N×N таким образом, чтобы никакие два ферзя не били друг друга.
Расстановка ферзей таким образом называется мирной. Например, для доски 8×8 существует 92 различные мирные расстановки ферзей.
Вводится единственное натуральное число N (1 Добавлено через 2 часа 53 минуты
Вот что набросал:
Проходит только 8 тестов из 12. Последние 4 теста не проходит по времени.
Добавлено через 2 минуты
Получить m расстановок 8 ферзей на шахматной доске, при которых ни один из ферзей не угрожает другому
10. Дано натуральное число m. Получить m расстановок 8 ферзей на шахматной доске, при которых ни.
Получить m расстановок 8 ферзей на шахматной доске
Дано натуральное число m. Получить m расстановок 8 ферзей на шахматной доске, при которых ни один.
Рекурсия: найти количество всевозможных различных расстановок n ферзей на доске n*n
Дана шахматная доска размера n*n. Найдите количество всевозможных различных расстановок n ферзей на.
Определить количество расстановок ладей на шахматной доске
какое кол-во способ расставить ладей на шахматную доску, так чтобы они били все свободные поля?
Gdez, да, вот ссылка:
Gdez, аналогично. Сумел улучшить свой результат до 10 тестов из 12, но не более того.
Спасибо большое за вариант, он гораздо красивее моего.
Добавлено через 29 минут
Gdez, если смотреть по времени — то да, мое решение с рекурсией получше. На 11 тесте время примерно четверть секунды (у тебя примерно три четверти секунды).
Добавлено через 10 минут
Да, Arsegg, посмотрел другие решения, и судя по времени, некоторые не гнушались грязных хаков. Чего-нибудь вроде этого, я так думаю:
Но это несерьезно. Лучше попробую переписать свое рекурсивное решение на C++.
Добавлено через 1 час 14 минут
Ссылка на еще один вариант решения данной задачи, автор Catstail.
Добавлено через 1 час 55 минут
Переписал свой код на C, довольно корявенько (ведь я не умею программировать на этом языке).
Программа прошла все тесты за 654 мс, я в полном шоке!! Не думал, что C настолько быстрее Python, особенно в столь неумелых руках, как мои.
Решение
31.12.2020, 12:17 Количество расстановок N ферзей на шахматной доске N×NGdez, нам всем есть куда расти! Успехов в новом году!
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Разместить на шахматной доске 8х8 максимальное количество ферзей
Помогите написать функцию в VBA Задача: разместить на шахматной доске 8х8 максимальное количество.
Вывести максимальное количество ферзей, которых можно расставить на шахматной доске
Вероятно, многие из вас играли в шахматы. Поэтому вы знаете, что ферзь может двигаться как по.
8 ферзей на шахматной доске
раставить 8 ферзей на доске с помощью oracle sql (1 запросом) Добавлено через 34 секунды with.
Расстановка N ферзей на шахматной доске N×N
Требуется расставить N ферзей на шахматной доске N×N таким образом, чтобы никакие два ферзя не били.
Расставить на шахматной доске 8 ферзей.
люди помогите решить пожалуйста курсовик срочно нужно(((( Расставить на шахматной доске 8 ферзей, .
Расположить на шахматной доске 8 ферзей
Доброго времени суток! Помогите, пожалуйста, с решением: Расположить на шахматной доске 8 ферзей.
Источник
8 ферзей на шахматной доске
Восемь ферзей на шахматной доске — головоломка, которая адресована начинающим игрокам для развития пространственного мышления и аналитических способностей. Автором задачи стал теоретик шахмат Макс Беззель (1824-1871). Условия головоломки были сформулированы в 1848 году: игроку предстояло расположить на классической шахматной доске восемь ферзей так, чтобы ни одна из фигур не находилась под боем любой другой. Задача усложняется геометрией ферзевых ходов, которые осуществляются не только по вертикали или горизонтали, но и в диагональном направлении.
Классическая версия головоломки может формулироваться в нескольких вариантах:
- найти любое допустимое решение;
- выявить все возможные варианты решений;
- доказать возможность решения задачи.
Модифицированная версия головоломки Беззеля используется при обучении школьников основам программирования и математического анализа. Ученикам предлагается расставить N фигур на доске N×N клеток. В качестве N выступает любое целое число. Многочисленные исследования показали, что при значениях переменной, равным 2, 3 или 4, задача становится нерешаемой.
Допустимые варианты решения
За 170 лет шахматистам удалось найти 12 базовых решений для головоломки Беззеля. Они рассматриваются в качестве основных во всех учебниках по шахматной теории. Учет правил симметрии позволит расширить число доступных решений до 92: расположение фигур относительно друг друга будет неизменным, варьируются только координаты клеток с ферзями.
Карл Гаусс, известный математик и любитель шахмат, смог выявить 72 варианта расстановки. Ученый использовал своеобразный подход: при обнаружении подходящего решения он последовательно разворачивал доску вокруг оси с шагом в девяносто градусов. Так появлялись «дополнительные» варианты расстановки без длительных изысканий.
Как расставить 8 ферзей на доске
Головоломка Беззеля рассматривается тренерами как задача средней сложности: подходящее решение могут обнаружить новички за несколько минут. Наиболее известная расстановка фигур отражена в таблице.
Номер ферзя | Координаты |
Первый | h5 |
Второй | f1 |
Третий | d8 |
Четвертый | b4 |
Пятый | g7 |
Шестой | e3 |
Седьмой | c6 |
Восьмой | a2 |
Три дополнительных варианта можно получить с помощью последовательного поворота доски по предложенному Гауссом принципу. Аналогичным образом действует зеркальное отражение расстановки фигур.
Решение задачи о восьми ферзях полезно для формирования навыков счета ходов, анализа текущей позиции на доске и поиска быстрого ответа на комбинацию соперника. Новичкам рекомендуется искать варианты расстановки фигур без использования ухищрений в виде поворотов игрового поля. В этом случае все обнаруженные решения станут результатом интеллектуальных усилий игрока.
Модифицированные условия задачи Беззеля часто используются в математических секциях или на уроках информатики. Так, осваивающие основы программирования ученики могут создать скрипт для поиска решений при фиксированном или произвольном значении переменной N, обозначающей количество расставляемых на доске фигур и размеры игрового поля.
Источник
Задача о восьми ферзях
Задача о восьми ферзях.
Одно из решений: a7, b4, c2, d8, e6, f1, g3, h5:(87)
Зада́ча о восьми́ фе́рзя́х — широко известная задача по расстановке фигур на шахматной доске. Исходная формулировка: «Расставить на стандартной 64-клеточной шахматной доске 8 ферзей так, чтобы ни один из них не находился под боем другого». Подразумевается, что ферзь бьёт все клетки, расположенные по вертикалям, горизонталям и обеим диагоналям. Обобщение задачи — расставить максимальное количество взаимно не бьющих друг друга ферзей на прямоугольном поле, в частности, квадратном поле, со стороной n.
Содержание
Формулировка [ ]
В более «математическом» виде задача может быть сформулирована несколькими способами, например, так: «Заполнить матрицу размером 8×8 нулями и единицами таким образом, чтобы сумма всех элементов матрицы была равна 8, при этом сумма элементов ни в одном столбце, строке или диагональном ряде матрицы не превышала единицы».
Конечная цель, поставленная перед решающим задачу, может формулироваться в нескольких вариантах:
- Построить одно, любое решение задачи.
- Аналитически доказать, что решение существует.
- Определить количество решений.
- Построить все возможные решения.
- Одна из типовых задач по программированию алгоритмов перебора: создать компьютерную программу, находящую все возможные решения задачи.
Иногда постановка задачи требует нахождения способов расстановки N ферзей на доске N×N клеток (при этом при 1 Особенности решения [ ]
Общее число возможных расположений 8 ферзей на 64-клеточной доске равно Шаблон:Num (= 64!/(8!(64-8)!)). Общее число возможных расположений, удовлетворяющих условию задачи, равно 92. Современные компьютеры уже позволяют произвести решение задачи (нахождение любого или всех решений) путём прямого перебора всех возможных вариантов расстановки, но обычно такое решение считается некорректным, и от решающего задачу требуется найти алгоритм, который позволял бы существенно сократить объём перебора. Например, очевидно, что на одной горизонтали или вертикали доски не может находиться больше одного ферзя, поэтому алгоритм решения изначально не должен включать в перебор позиции, где два ферзя стоят на одной горизонтали или вертикали. Даже такое простое правило способно существенно уменьшить число возможных расположений: Шаблон:Num (то есть 8 8 ) вместо Шаблон:Num . Генерируя перестановки, которые являются решениями задачи о восьми ладьях и затем проверяя атаки по диагоналям, можно сократить число возможных расположений всего до Шаблон:Num (то есть 8! ). Однако, если условие нападения по диагонали учитывать при генерации позиций, скорость счёта возрастает на порядок.
Один из типовых алгоритмов решения задачи — использование поиска с возвратом : первый ферзь ставится на первую горизонталь, затем каждый следующий пытаются поставить на следующую так, чтобы его не били ранее установленные ферзи. Если на очередном этапе постановки свободных полей не оказывается, происходит возврат на шаг назад — переставляется ранее установленный ферзь (такой алгоритм использован в приведённых ниже программах).
Программа, реализующая этот алгоритм на QBasic.
Список позиций, выдаваемый программой, является списком решений исходной задачи:
Интересно отметить, что эти 92 расположения разбиваются на 12 групп: 11 групп по 8 и одну из 4 расположений. Положения внутри групп получаются из одного положения путём преобразований симметрии: отражения от вертикальной и горизонтальной осей, отражения от диагоналей доски и поворотов на 90, 180 и 270 градусов. Пары расположений, симметричные относительно горизонтальной оси, имеют сумму номеров равную 93, то есть для каждой группы эта сумма равна 93×4.
Вот как выглядит это разделение. Причём сумма номеров позиций в каждой группе равна 372. Группа номер 10 — симметрическая.
В этой группе при повороте на 180 градусов позиции переходят сами в себя. Характерной особенностью симметрических положений является пустой квадрат 4×4 в середине доски и пустые диагонали. Таким образом, имея 12 расположений — по одному из каждой группы, можно получить все остальные, что, впрочем, известно из шахматной литературы [1] . В списке знаком «плюс» отмечены позиции, которые выбраны в качестве базовых (то есть тех, с которыми производятся преобразования симметрии) в английской и украинской версии данной статьи в Википедии и указаны номера, под которыми они в ней фигурируют. Здесь же базовые позиции (первые позиции в каждой группе) выбраны по признаку минимального номера в группе. Очевидно, что наборов базовых позиций можно составить 4×8 11 .
Вариант решения для доски произвольного размера на C# [ ]
Ниже приведен только класс, непосредственно реализующий алгоритм решения.
Время выполнения алгоритма [ ]
График зависимости времени от размера (экспоненциальный)
Ниже представлена зависимость времени выполнения программы от размера доски (время приведено для компьютера с процессором Intel Core2 Q6600 @ 2.4 ГГц):
Размер | Решений | Время (мс) |
---|---|---|
4 | 2 | 1 |
5 | 10 | 2 |
6 | 4 | 2 |
7 | 40 | 2 |
8 | 92 | 3 |
9 | 352 | 6 |
10 | 724 | 16 |
11 | 2 680 | 69 |
12 | 14 200 | 376 |
13 | 73 712 | 2 311 |
14 | 365 596 | 15 411 |
15 | 2 279 184 | 108 587 |
16 | 14 772 512 | 812 945 |
Характер зависимости времени выполнения от размера доски — экспоненциальный (как показано на графике).
Вариант решения для доски произвольного размера на C [ ]
Здесь приведена программа, решающая задачу для размеров доски от 1 до 17. Программа измеряет и выводит время работы алгоритма.
Время выполнения алгоритма [ ]
Ниже представлена зависимость времени выполнения программы от размера доски (время приведено для компьютера с процессором Intel Core i5-2410M @ 2.3 ГГц):
Размер | Решений | Время (с) |
---|---|---|
1 | 1 | 0.000 003 |
2 | 0 | 0.000 001 |
3 | 0 | 0.000 001 |
4 | 2 | 0.000 004 |
5 | 10 | 0.000 008 |
6 | 4 | 0.000 025 |
7 | 40 | 0.000 091 |
8 | 92 | 0.000 347 |
9 | 352 | 0.001 508 |
10 | 724 | 0.008 023 |
11 | 2 680 | 0.031 750 |
12 | 14 200 | 0.114 120 |
13 | 73 712 | 0.538 676 |
14 | 365 596 | 3.267 996 |
15 | 2 279 184 | 21.486 720 |
16 | 14 772 512 | 147.388 255 |
17 | 95 815 104 | 1 088.978 601 |
18 | 666 090 624 | 8 776.579 792 |
Вариант решения для доски размера до 10-11 на Oracle 11 SQL [ ]
В Oracle SQL возможно решение одним рекурсивным оператором. Время выполнения — секунды для доски 8*8, до 1 минуты для доски 9*9.
Использован усовершенствованный метод поиска с возвратом:
На доске есть четыре типа ресурсов: вертикали, горизонтали, левые и правые диагонали. Каждая поставленная фигура на доску «потребляет» одну горизонталь, одну вертикаль, и две диагонали. Соответственно, следующего ферзя мы будем пробовать ставить на ту клетку, для которого есть оставшиеся незанятые горизонталь, вертикаль и диагонали. Этим существенно сокращаем время перебора.
Рекурсивное решение для доски произвольного размера на C++ [ ]
Альтернативный подход [ ]
Если решать более общую задачу об N ферзях при помощи описанного выше алгоритма, то такой перебор вариантов даже с использованием описанных выше сокращений будет весьма долго работать уже при N = 20, так как 20! = 2.433 Шаблон:E . Поэтому представляет особенный интерес следующий эвристический алгоритм , решающий задачу об N ферзях на поле размером N x N. Он работает для всех N ≥ 4 или N = 1:
- Разделить N на 12 и запомнить остаток (N будет равно 8 для задачи о восьми ферзях).
- Занести в список все четные числа от 2 до N по порядку.
- Если остаток равен 3 или 9, перенести 2 в конец списка.
- Добавить в список все нечетные числа от 1 до N по порядку, но, если остаток равен 8, перевернуть пары соседних чисел (например: 3, 1, 7, 5, 11, 9, …).
- Если остаток равен 2 и N ≥ 3, поменять местами 1 и 3, затем, если N ≥ 5, перенести 5 в конец списка.
- Если остаток равен 3 или 9, переместить 1 и 3 (именно в этом порядке, а не в котором они сейчас) в конец списка.
- Разместить ферзя в первом столбце и в строке с номером, равным первому элементу списка, затем поместить следующего ферзя во втором столбце и в строке с номером, равным второму элементу списка, и т. д.
Для N = 8 результат работы этого алгоритма показан на картинке.
Ещё несколько примеров:
- 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 ферзей (остаток 8): 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 1, 7, 5, 11, 9, 15, 13, 19, 17.
Источник