|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Egorov Pavel 2:5080/169.35 19 Feb 2002 00:33:19 To : Yasha Davidov Subject : 8 ферзей -------------------------------------------------------------------------------- Как-то раз Yasha Davidov писал Egorov Pavel следующее: YD> Пока я сделал так: YD> Я перебираю значения в таком порядке: YD> [01234567] YD> [01234576] YD> [01234657] YD> [01234675] YD> ... YD> Всё это очень похоже на простой перебор чисел. Поэтому я делаю так, Бу! Hе делай так больше :) Это делается Backtracking'ом (он же "поиск в глубину" и "перебор с возвратом") Ты же перебираешь много чего лишнего. Так, например, если уже первый ферзь бьет второго, то положение всех остальных перебирать не надо. Алгоритм примерно такой: Все поле свободно. Ставим первого ферзя и объявляем все поля, что он бьет, занятыми. Если удается поставить на свободное место следующего ферзя - ставим. иначе убираем последнего поставленного ферзя и ставим на следующее место. YD> когда я нахожу перестановку, являющуюся решением я беру все её 8 YD> отражений, и если хоть одно из этих отражений меньше, (то есть было YD> раньше) чем текущая доска (я могу легко это определит), то значит этот YD> тип доски я уже находил раньше. В противном случае это решение. Плюс я YD> перебираю только от [01234567] до [476543210], то есть только YD> половину. Hу а так все ок! Всем спасибо, до свидания! С вами был Егоров Павел :) --- GoldED/386 3.00.Alpha3+ * Origin: 2+2=4 это не тождество, а выражение равное TRUE (2:5080/169.35) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/39993c7190f4.html, оценка из 5, голосов 10
|