Задачка на рекурсию с возвратом о_О

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
Emo_Freakie
Сообщения: 2
Зарегистрирован: 04 май 2008, 08:17
Откуда: Тула
Контактная информация:

Собственно задачка простая - расстановка 5 ферзей на кубической доске 5*5*5, чтобы они друг друга не били.
Но я не знаю с какой стороны к ней подойти - сначала пробовала описать класс с полями, в которых лежат координаты - получается довольно муторно.
Поиск в гугле ничего не дал, но что-то мне подсказывает что решение простое и изящное)
Пожалуйста, помогите!!!
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Привет, землячка! Для начала советую описать правила, которые задают ферзю поля удара в 3Д пространстве. Т.к. основываясь на шахматах в 2Д - в пространстве имеем неоднозначное представление полей "под ударом". В общем случае - должна быть создана так называемая "маска" куба, в которой допустим 1-ца говорит о том, что поле под ударом одного из ферзей, 0 - иначе. Расставлять ферзей в места, где маска = 0 - можно рекурсивно, можно полным перебором - зависит от правил удара ферзя.
Вообще на мой взгляд расстановка N ферзей в кубе N*N*N задача скорее математическая и наверняка есть изящное решение. Без правил удара ферзя сказать больше пока не могу.
It's a long way to the top if you wanna rock'n'roll
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

Помоему объектное решение тоже красиво, где каждый объект ищет себе место сам.
Emo_Freakie
Сообщения: 2
Зарегистрирован: 04 май 2008, 08:17
Откуда: Тула
Контактная информация:

Приветствую, земляк!)
Правила я осилила.
Для диагоналей - (в трёх измерениях i, j, k)
for (x=(-min(min(i,j),k));x<=4-max(max(i,j),k);x++)
{//элемент лежит на диагонали, проходящей через элемент A[i+x, j+x, k+x]
};
for (x=(-max(max(i,j),k));x<=4-max(max(i,j),k);x++)
{//элемент лежит на обратной диагонали
};
C вертикалями и горизонталями думаю просто проверкой на равенство соответсвующих индексов.
вопрос в другом - нужно заставить каждого следующего ферзя просматривать позиции ВСЕХ уже расставленных. Вот как эту рекурсию организовать непонятно(
Ответить