Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/32: Рейтинг темы: голосов - 32, средняя оценка - 4.72
3 / 3 / 5
Регистрация: 05.03.2011
Сообщений: 270

Расстановка ферзей

01.10.2011, 07:23. Показов 5934. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый День!!! Помогите Пожалуйста придумать код к следующей задаче:
Найдите такую расстановку пяти ферзей на шахматной доске, при которой каждое поле будет находиться под ударом одного из них.
Нужен "алгоритм с возвратом" с использованием рекурсивных процедур
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.10.2011, 07:23
Ответы с готовыми решениями:

о расстановке ферзей
Известная задача о расстановке ферзей на шахматной доске так, чтобы они не били друг друга. Интересует не сам алгоритм, а вычисление...

расстановка знаков арифметических операций.
Разработать программу, отыскивающую такую расстановку знаков арифметических операций +, -, *, / вместо знака ? в выражении ((((1?2) ? 3) ?...

Расстановка скобочек в выражении (все комбинации)
собственно сабж: расстановка всех комибинаций скобочек в мат. выражении от 4 до 8 цифр в выражении. пример: есть выражение 1+2+3+4 ...

1
Level 2
 Аватар для FakiR
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
03.10.2011, 00:02
http://ru.wikipedia.org/wiki/%... 0%E7%FF%F5

Добавлено через 4 минуты
Задача о восьми ферзях
Алгоритм решения достаточно простой поиск с возвратом.
Алгоритм строится на следующем несложном заключении: поскольку доска 8х8 и нам надо расположить на ней 8 ферзей, то из этого следует, что в каждом столбце доски будет точно один ферзь. Остаётся только выбрать правильную позицию ферзя в столбце. Для этого мы просматриваем все столбцы слева направо, начиная с первого столбца (самого левого). Поскольку наша доска пуста, то расположить на ней ферзя (в первом столбце) очень просто: достаточно поставить его на любое место. Для определённости, мы будем предполагать, что просмотр столбца с целью поиска полей, которые не находятся "под боем", начинается с самой верхней строки и идёт вниз. Таким образом, просматривая первый столбец сверху вниз, мы находим первое поле, которое не бьётся другими ферзями. Для первого столбца это будет поле (1,1) - левый верхний угол доски (в шахматах - это поле А8). Итак, первый ферзь поставлен.

Переходим ко второму столбцу, в котором надо подобрать позицию для второго ферзя. Поступаем точно также: просматриваем поля второго столбца сверху вниз - ищем поле, которое не бьётся уже поставленными ферзями. Как только такое поле найдётся - ставим на него ферзя.

Аналогично с третьим, четвёртым и пятым ферзями:

С шестым и седьмым ферзями проблем тоже не возникает. Создаётся иллюзия, что задача сейчас будет решена...

Но посмотрите на доску - в последний столбец невозможно поставить ферзя! Все поля восьмого столбца находятся под боем! Что же делать? Давайте подумаем из-за чего сложилась такая ситуация? Правильно, из-за неправильной расстановки предыдущих ферзей, ведь именно их расположение блокирует последний столбец целиком. Следовательно, надо изменить расположение уже установленных фигур. Возвращаемся на шаг назад к седьмому ферзю. Попробуем изменить его позицию. Как мы уже знаем - в одном столбце находится один ферзь, поэтому двигать его по горизонтали мы не будем. Остаётся попытаться сдвинуть его по вертикали. Очевидно, что двигать ферзя вверх смысла никакого нет, так как там мы уже проверили все поля и они все под боем. Поэтому выход один - сдвигаем седьмого ферзя вниз.

Однако не всё так просто: все поля ниже текущей позиции находятся под боем! Поля выше - тоже! А текущая позиция нас не устраивает, т.к. в совокупности с положением других ферзей, блокирует решение задачи. Убираем седьмой ферзь с доски и возвращаемся к шестому ферзю. Пытаемся скорректировать его позицию, двигая его вниз. Как видно на рисунке, это ничего не даст: все поля ниже находятся под боем.

Убираем шестого ферзя с доски и возвращается к пятому. Корректируем его позицию. В данном случае в пятом столбце есть поле, ниже текущего, которое не под боем. Перемещаем туда пятого ферзя.

Поскольку пятый ферзь установлен - переходим к следующему столбцу (опять движемся вперёд). Впрочем, при таком положении первых пяти ферзей, шестой ферзь установить нельзя. Нам придётся опять вернуться к пятому, затем к четвертому и так далее. В конце концов, двигаясь по столбцам вперёд (слева направо) и возвращаясь назад (справа налево) при неудаче, мы получим решение, приведённое в секции "Результаты" в конце этой статьи.
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.10.2011, 00:02
Помогаю со студенческими работами здесь

Расставить в клетках K ферзей так, чтобы они друг друга не били
Очень нужна помощь! Напишите, пожалуйста, код программы (а если с пояснениями что в нем используется было бы круто) можно на С, С++, java...

Расстановка 8 ферзей
Привет всем, слушайте, вот исходник на С++ задача <<о восьми ферзях>>: #include<iostream> #include<cmath> ...

Расстановка ферзей
Добрый День!!! Помогите Пожалуйста написать программу: Найдите такую расстановку пяти ферзей на шахматной доске, при которой каждое поле...

Расстановка восьми ферзей
uses CRT; {очистка экрана} Const N = 8; {задаем константы} M = 8; Type Queen = record X,Y : Integer; ...

[Haskell] Расстановка 8 ферзей
import Control.Monad (foldM) import Data.List ((\\)) main :: IO () main = mapM_ print $ queens 8 --печатает все аргументы ф-ции...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка 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" Извлеките архив и вы увидите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru