Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > ладьи не бьют друг друга


Автор: Domen 22.11.2009, 23:37
Здравствуйте! smile Хорошая задачка!
Вычислить рекурсивно число расстановок N ладей на доске N*N таких, 
что ладьи симметричны относительно обеих диагоналей и не бьют друг друга.

Я думаю что если доску разделить по диагонали.И сравнивать две части по количеству расставленных ладей.
Расставляя их по вертикалям. Но не знаю как это записать. smile 
Можно упростить задачу для стандартного поля шахматной доски.

Автор: dereyly 23.11.2009, 01:50
Этож классическая задача с растановкой ферзей, но вам ее чуть упростили до ладей (программировать проще будет). Так что советую вам поискть самому так как информации в интернете много... не имеет смысла ее перепечатывать.

Автор: Akina 23.11.2009, 08:46
Цитата(Domen @  23.11.2009,  00:37 Найти цитируемый пост)
ладьи симметричны относительно обеих диагоналей и не бьют друг друга

Нерешаемо. После отражения любой ладьи относительно ДВУХ диагоналей получаем 4 ладьи, кадую из которых бьют 2 другие.

Автор: dereyly 23.11.2009, 17:11
Цитата(Akina @ 23.11.2009,  08:46)
Цитата(Domen @  23.11.2009,  00:37 Найти цитируемый пост)
ладьи симметричны относительно обеих диагоналей и не бьют друг друга

Нерешаемо. После отражения любой ладьи относительно ДВУХ диагоналей получаем 4 ладьи, кадую из которых бьют 2 другие.

Непонял почему задача с вашей точки зрения нерешаема... На мой взгляд у задачи есть во-первых 2 решения когда ладьи расположены по обеим диагоналям. Так же полагаю что общее количество расстановок будет равным N.

Автор: Akina 23.11.2009, 21:24
Цитата(dereyly @  23.11.2009,  18:11 Найти цитируемый пост)
у задачи есть во-первых 2 решения когда ладьи расположены по обеим диагоналям

Согласен, не рассмотрел этот особый случай - когда ладья при отражении относительно одной из диагоналей отражается в себя. 
Но это, собсно, и всё. Два решения. По одной диагонали. По второй диагонали. Третьего решения не будет.

Автор: Alexandr87 24.11.2009, 06:27
Цитата(Akina @  24.11.2009,  00:24 Найти цитируемый пост)
Третьего решения не будет. 

Код

0000X
0X000
00X00
000X0
X0000

Автор: Alchimik 1.12.2009, 10:45
Цитата(Akina @  23.11.2009,  08:46 Найти цитируемый пост)
После отражения любой ладьи относительно ДВУХ диагоналей получаем 4 ладьи, каждую из которых бьют 2 другие.

Если n - нечётное и ладью располагать на вертикальной или горизонтальной линии делящей квадрат пополам, то да, ладья бьёт одно из своих "отражений. Если поставить в любое другое место , или n - чётное, ладья своего "отражения" не бьёт.

Напрмер:
Код

0001000
0042000
0403000
1230321
0003040
0002400
0001000

1, 2, 3 бьёт своё отражение, а 4 - нет.

Код

0000001
0000100
0000010
0001000
0100000
0010000
1000000

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)