![]() |
|
|
![]()
|
|
| .talisman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 19.2.2005 Репутация: нет Всего: нет |
Сколькими способами можно расставить n ладей на доске n*n так, чтобы они держали под угрозой все поля доски?
заранее спасибо. |
|||
|
||||
| .talisman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 19.2.2005 Репутация: нет Всего: нет |
блин, ну вы мне идейку подкиньте, а я напишу код и выложу.
|
|||
|
||||
| segmentation_fault |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 14.2.2005 Где: в интернете Репутация: нет Всего: 1 |
Ну вот наверное самый простой алгоритм:
Перебрать все возможные расстановки n ладей на доске n*n. Для каждой расстановки проверить если все клетки под боем если да, то соответственно прибавляешь 1 к количеству искомых расстановок Нахождение возможных расстановок частный случай проблемы нахождения всех подмножеств определённого множества. В данном случае ты ишеш подмножества размера n в множестве размера n^2. Будешь ето решать лексикографически или по другому дело твоё. Если одна ладья стоит на клетке (x1, y1), 0<= x1 <= n, 0<= y1 <= n, то любая клетка (x2, y2) где x2=x1 или y2 = y1 будет под боем. Дальше просто находишь все такие клетки для всех n ладей. |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: нет Всего: 165 |
--------------------
|
||||
|
|||||
| Alastis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 15.11.2004 Где: Казахстан, Астана Репутация: нет Всего: 10 |
В книге Бадда "ООП" (могу выслать если надо) есть учебный пример - задача о восьми ферзях. Очень похоже на твою задачу, посмотри исходник, решение довольно красивое при помощи чистого ООП. Правда пример про конкретную шахматную доску 8 на 8, но немного подумать и переделать и все.
Выкладываю исходник класса Ферзя. Присоединённый файл ( Кол-во скачиваний: 11 )
Queen.txt-------------------- Прости, что я говорю, когда ты меня перебиваешь. |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Вот какая0то шахматная теория:
q[i,j]=(i+j) mod 2; -------------------- Всем добра |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Думай вот куда - на доске N*N при расстановке ладей, бьющих ВСЕ поля, ОБЯЗАТЕЛЬНО либо на каждой горизонтали по ладье, либо на каждой вертикали по ладье. Отсюда - расстановок, когда на каждой горизонтали по ладье, N в степени N. Столько же - когда на каждой вертикали. Осталось посчитать и отнять количество дублей - а оно равно количеству расстановок, когда ни одна ладья не бьет другую, т.е. N! (факториал).
Результат - 2*N^N-N! -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| .talisman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 19.2.2005 Репутация: нет Всего: нет |
Akina, спасибо большое -- это именно то, что нужно.
|
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |