|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Yasha Davidov 2:5020/400 16 Feb 2002 00:49:38 To : All Subject : 8 ферзей -------------------------------------------------------------------------------- Привет All. Решил тут написать программку решения задачу о 8 ферзях. Если кто не помнит условие, то надо расположить на шахматной доске 8 ферзей так, чтобы они друг друга не "били". Возникла проблема: решения получаются, их 92 штуки, однако несимметричных лишь 12. Hужен алгоритм, который позволил бы убрать лишние варианты. Можно конечно записывать все решения в массив, а потом выкидывать ненужные, однако чувствую есть способ проще. А точнее: Hаше положение доски хранится в виде [04752613]. Это выглядит так: ---------- |*.......| |......*.| |....*...| |.......*| |.*......| |...*....| |.....*..| |..*.....| ---------- Ясно, что есть также [06471352] (Отражение относительно главной диагонали) [73025164] (Отражение относительно горизонтали) [31625740] (Отражение относительно вертикали) . . . И т.д. Итого 8 штук. Вопрос такой: можно ли как-нибудь придумать какое-то разделение множества всех позиций на 8 подмножеств (где каждое получается из другого поворотами и отражениями), а потом определить относится ли положение к какому-нибудь из них? То есть можно ли в функцию, которая проверяет, является ли данная позиция решением добавить простой кусок, который из 8 разных позиций (получаемых поворотами) будет отбраковывать 7, а одну оставлять. Hадеюсь хоть чуть-чуть понятно :) -- Best regards, aBocT. Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5 * Origin: Talk.Mail.Ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/4598e0affa36.html, оценка из 5, голосов 10
|