|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
|
Расстановка N ферзей на шахматной доске N×N30.12.2020, 12:07. Показов 20252. Ответов 28
Требуется расставить N ферзей на шахматной доске N×N таким образом, чтобы никакие два ферзя не били друг друга.
Расстановку необходимо вывести в виде N строк из 2N - 1 символов, где символ '.' означает пустую клетку, символ 'Ф' - ферзя, а пробел служит разделителем. Входные данные: Вводится единственное натуральное число N (4 <= N <= 200). Выходные данные: Выведите искомую расстановку ферзей. Пример: Ввод: 4 Вывод: . Ф . . . . . Ф Ф . . . . . Ф . Ограничения: Время: 1 с Память: 64 Мб
0
|
|
| 30.12.2020, 12:07 | |
|
Ответы с готовыми решениями:
28
Расстановка ферзей Расстановка ферзей |
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
| 30.12.2020, 12:18 | |
|
КулХацкеръ, What???
0
|
|
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
|
| 30.12.2020, 12:25 [ТС] | |
|
Gdez, в смысле? Что ты хотел сказать этим вопросом?
0
|
|
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
| 30.12.2020, 12:30 | |
|
КулХацкеръ, Это прикол?
Просто я считаю, что для твоего уровня это "семечки"
0
|
|
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
|
| 30.12.2020, 12:40 [ТС] | |
|
Ну не знаю, как по мне задачи довольно приличные по сложности.
Сейчас с удовольствием ломаю над ними голову, думаю на пару часов этих задач точно хватит мне).
0
|
|
|
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
|
|
| 30.12.2020, 12:52 | |
|
0
|
|
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
||
| 30.12.2020, 13:02 [ТС] | ||
|
Если кому-то интересно, то задачи были ранжированы по сложности так:
Расстановка N ферзей на шахматной доске N×N: * Количество расстановок N ферзей на шахматной доске N×N: *** Количество расстановок нескольких (K) ферзей на шахматной доске N×N: **** Путь коня по всем клеткам шахматной доски N×M: * Будет здорово увидеть решение задач с тремя звездами и более - это точно не "семечки"! Добавлено через 4 минуты
Добавлено через 36 секунд Возможно туплю страшно, ведь у этой задачи всего одна звезда.
0
|
||
|
|
|
| 30.12.2020, 13:05 | |
|
Ну если надо любую расстановку - то всё просто. Ставим на произвольную клетку, затем на следующую не под боем, и т. д., пока останется хотя бы одна не под боем. (Т. к. ферзь бьёт симметрично во все стороны, можно утверждать, что новый ферзь не будет бить старых.)
2
|
|
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
||
| 30.12.2020, 13:37 [ТС] | ||
|
Да я примерно так и делаю, но количество необходимых проверок растет просто жесть!
Гляньте ограничения:
И потом, если алгоритму не удается с первого раза расставить всех ферзей, приходится возвращаться назад и пробовать другие небитые поля, что еще больше увеличивает время выполнения программы
0
|
||
|
|
|
| 30.12.2020, 14:01 | |
|
КулХацкеръ, не понял, какие проверки?
С каждым новым ферзём мы просто помечаем новые клетки под боем. Всё. Потом просто надо будет просмотреть отмеченые, чтобы найти первую попавшуюся свободную.
0
|
|
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
|||||||
| 30.12.2020, 14:14 [ТС] | |||||||
|
Я проверял, что каждый новый ферзь не бьет предыдущих.
То есть для второго ферзя одна проверка, для третьего две проверки, ..., для 200-го 199 проверок. Неэффективный алгоритм, согласен. Но даже с твоим актуальна проблема:
Добавлено через 1 минуту И с другими задачами помогите плиз, уже час прошел, а я решил только одну задачу, причем самую простую . Я надеялся за два часа решить все задачи ((.
1
|
|||||||
|
|
|
| 30.12.2020, 14:36 | |
|
КулХацкеръ, чёта всё равно не понял.
Я же выше написал - ферзь бьёт симметрично, поэтому можно не проверять, что новый ферзь не бьёт предыдущих. Вот с пешкой надо было бы провенять, а симметрично бьющую фигуру - нет.
0
|
|
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
|
| 30.12.2020, 14:45 [ТС] | |
|
Я и проверял только, что каждый новый ферзь не бьет предыдущих. То, что предыдущие ферзи бьют нового, я не проверял (точнее, проверка для нового ферзя дает ответ на этот вопрос).
Добавлено через 5 минут И в любом случае, решение в итоге получилось другое (на основе алгоритма из Википедии).
0
|
|
|
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
|
||||||
| 30.12.2020, 15:25 | ||||||
|
Как на счёт такого решения? Оно основано не на математике, а на наблюдении.
3
|
||||||
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
||
| 30.12.2020, 16:08 [ТС] | ||
|
unfindable_404, решение верное (за исключением того, что разделитель заменил с пустой строки на пробел).
0
|
||
|
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
|
||||||||||||||||||||||||||||||||
| 30.12.2020, 17:38 | ||||||||||||||||||||||||||||||||
|
Я всегда начинаю решать подобные задачи с перебора возможных итогов на маленьких входных данных, с целью поиска закономерностей. Сначала разобрал вариант с n=4: Кликните здесь для просмотра всего текста
x - поле под боем
Попробовал начать с ферзя, расположенного в углу:
Пробую начать с ферзя на второй клетке
Далее рассмотрел вариант с n=5 Кликните здесь для просмотра всего текста
Начал с ферзя, расположенного в углу:
На данном этапе у меня сформировалась гипотеза, что при нечетном n, нужно начинать с угловой клетки, а при четном, со второй клетки. И ещё я заметил, что следующий ферзь нужно ставить со сдвигом вниз на одну клетку и вправо на две клетки. Ну и дальше я, просто, составил несколько расстановок с бОльшим значением n, чтобы подтвердить или опровергнуть предположение. Кликните здесь для просмотра всего текста
n = 8
n = 9
Предположение подтвердилось и я написал скрипт.
1
|
||||||||||||||||||||||||||||||||
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
|
| 30.12.2020, 18:16 [ТС] | |
|
unfindable_404, шикарное объяснение, спасибо большое.
0
|
|
|
Супер-модератор
|
||||||
| 30.12.2020, 20:03 | ||||||
|
Вот мое решение... Задача-то классическая - бэктрекинг. Все руки не доходили "въехать". n ферзей на поле n*n:
n=5 !!! [(0, 0), (2, 1), (4, 2), (1, 3), (3, 4)] !!! [(0, 0), (3, 1), (1, 2), (4, 3), (2, 4)] !!! [(1, 0), (3, 1), (0, 2), (2, 3), (4, 4)] !!! [(1, 0), (4, 1), (2, 2), (0, 3), (3, 4)] !!! [(2, 0), (0, 1), (3, 2), (1, 3), (4, 4)] !!! [(2, 0), (4, 1), (1, 2), (3, 3), (0, 4)] !!! [(3, 0), (0, 1), (2, 2), (4, 3), (1, 4)] !!! [(3, 0), (1, 1), (4, 2), (2, 3), (0, 4)] !!! [(4, 0), (1, 1), (3, 2), (0, 3), (2, 4)] !!! [(4, 0), (2, 1), (0, 2), (3, 3), (1, 4)]
1
|
||||||
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
|
| 30.12.2020, 21:18 [ТС] | |
|
Catstail, если вы ничего не перепутали и написали в той теме, в которой планировали, то ваше решение не соответствует постановке задачи.
А если ваше решение предназначалось для темы Количество расстановок N ферзей на шахматной доске N×N, то увы, оно проходит только 9 тестов из 12, а три теста не проходит по времени. Но все равно спасибо. Чем больше вариантов, тем лучше.
0
|
|
| 30.12.2020, 21:18 | |
|
Помогаю со студенческими работами здесь
20
Расстановка ферзей Расстановка ферзей на шахматной доске
Получить m расстановок 8 ферзей на шахматной доске, при которых ни один из ферзей не угрожает другому Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений в EXE. Здесь описаны базовые шаги для старта программирования с помощью CMake и MinGW. Для набора. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|