|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
|
Расстановка N ферзей на шахматной доске N×N30.12.2020, 12:07. Показов 20157. Ответов 28
Требуется расставить N ферзей на шахматной доске N×N таким образом, чтобы никакие два ферзя не били друг друга.
Расстановку необходимо вывести в виде N строк из 2N - 1 символов, где символ '.' означает пустую клетку, символ 'Ф' - ферзя, а пробел служит разделителем. Входные данные: Вводится единственное натуральное число N (4 <= N <= 200). Выходные данные: Выведите искомую расстановку ферзей. Пример: Ввод: 4 Вывод: . Ф . . . . . Ф Ф . . . . . Ф . Ограничения: Время: 1 с Память: 64 Мб
0
|
|
| 30.12.2020, 12:07 | |
|
Ответы с готовыми решениями:
28
Расстановка ферзей Расстановка ферзей |
|
8849 / 4501 / 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
|
|
|
8849 / 4501 / 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 ферзей на шахматной доске, при которых ни один из ферзей не угрожает другому Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|