Страница 1 из 3
Обход шахматной доски
Добавлено: 11 июл 2008, 22:38
slaerok
Здравствуйте. Может быть кто-нибудь поможет в решении следующей задачи:
Имеется шахматная доска размером 5x5 и одна фишка в левом верхнем углу. Требуется определить количество всевозможных вариантов ее перемещения в правый нижний (противоположный) угол.
Как я понимаю, решение сводится к составлению и обходу дерева вариантов, но я пока не представляю, как его составить. Если сможете, подскажите пожалуйста алгоритм.
Re: Обход шахматной доски
Добавлено: 12 июл 2008, 10:18
Serge_Bliznykov
1) поищите, был пример обхода шахматной доски конём
2)
" писал(а):Имеется шахматная доска размером 5x5 и одна фишка в левом верхнем углу. Требуется определить количество всевозможных вариантов ее перемещения в правый нижний (противоположный) угол.
если это
ПОЛНАЯ формулировка задачи, то могу Вас поздравить - она не решается - точнее - количество вариантов БЕСКОНЕЧНО! ведь ничего не сказано про повторы ходов (можно возращаться назад сколько угодно раз - а это всё варианты...;-(
Наверно, условие задачи подразумевает запрет повторного захода на клетки доски - т.е. варианты ее перемещения в правый нижний (противоположный) угол, причём в любой клетке фишка не может быть более одного раза...
Re: Обход шахматной доски
Добавлено: 12 июл 2008, 15:12
slaerok
переформулирую задачу: требуется определить количество всевозможных вариантов перемещения фишки в правый нижний (противоположный) угол за 50 ходов по доске. Фишка может двигаться за 1 ход на 1 клетку в любом направлении (горизонтальном, вертикальном и диагональном).
Re: Обход шахматной доски
Добавлено: 12 июл 2008, 15:51
demon416
даже при такой формулировке количество вариантов будет огромным
если не учитывать границы то получается примерно 3*8^49 тоесть 5,3521788476473495539685723854356e+44 - нереальное для обработки количесво вариантов
с учетом границ и конечной цели выпиантов будет меньше но не намного
такчто перебор тут не годиться
в это случае надо смотреть в сторону комбинаторики
http://ru.wikipedia.org/wiki/Комбинаторика
Re: Обход шахматной доски
Добавлено: 12 июл 2008, 15:57
slaerok
Как раз перебор и нужен. Требуется реализовать именно такой метод выполнения задачи, на выполнение которого уходило бы много времени. Для начала можно ограничиться хотя бы 10ю ходами. Подскажите плиз алгоритм перебора.
Re: Обход шахматной доски
Добавлено: 12 июл 2008, 16:52
demon416
для перебора из 50 ходов на моем компьтере уйдет 154961556049029385 миллиардов лет

десять ходов куда реальнее
алгоритм примерно такой:
делаеш десять вложенных друг вдруга циклов от 1 до 8
в самом внутреннем цикле заполняеш табличку текущего варианта набора ходов(два столбца, десять строчек ) по принципу
1 строка - состояние внешнего цикла, 2 строка состояние вложенного в него итд
состояния высчитываются по таблице состояний:
значение цикла первый столбец(х) второй столбец(у)
1 -1 -1
2 -1 0
3 -1 1
4 0 -1
5 0 1
6 1 -1
7 1 0
8 1 1
когда заполниш таблицу,начнется проверка доходит ли данный вариант

проверка:
в цикле слаживаеш значения элементов каждого столбца таблицы текущего варианта набора ходов
на каждом шаге цикла цикла сумма должна быть больше либо равна нулю и меньше либо равна 4
если цикл пройден успешно
и сумма по столбцам равна 4 то этот вариант удовлетворяет условиям задачи(можно увеличить счетчик найденых вариантов)
многа букофф конечно но в коде все выглядит не очень сложно

Re: Обход шахматной доски
Добавлено: 12 июл 2008, 19:50
Serge_Bliznykov
demon416, Вы не заметили, что доска 5 на 5 (ПЯТЬ на ПЯТЬ) клеточек...
Re: Обход шахматной доски
Добавлено: 12 июл 2008, 21:10
demon416
все правильно доска 5 на 5 поэтому из одного угла в другой надо сделать 4 хода
Re: Обход шахматной доски
Добавлено: 13 июл 2008, 09:45
slaerok
спасибо, попробую реализовать, потом напишу что получилось
Re: Обход шахматной доски
Добавлено: 13 июл 2008, 11:19
slaerok
demon416 вы писали:
1 строка - состояние внешнего цикла, 2 строка состояние вложенного в него итд
состояния высчитываются по таблице состояний:
значение цикла первый столбец(х) второй столбец(у)
1 -1 -1
2 -1 0
3 -1 1
4 0 -1
5 0 1
6 1 -1
7 1 0
8 1 1
когда заполниш таблицу,начнется проверка доходит ли данный вариант
проверка:
в цикле слаживаеш значения элементов каждого столбца таблицы текущего варианта набора ходов
на каждом шаге цикла
поясние пожалуйста как составляется таблица состояний, и почему все таки 4 хода? Мне без разницы, за сколько ходов он дойдет до конца, лишь бы не больше чем за 10.