|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
22.01.2009, 13:56 | #1 |
Регистрация: 22.01.2009
Сообщений: 7
|
Выход из лабиринта
Нужно проверить существует ли выход из лабиринта, при вводе начальной и конечной точек.
Всегда выводит, что выход есть. Код:
|
22.01.2009, 14:35 | #2 |
Ну и что? :)
Форумчанин
Регистрация: 20.10.2008
Сообщений: 129
|
пара советов:
функцию LegalStep можно убрать расширив размеры лабиринта сверху снизу и с боков заполнив их как недоступные. и второе когда рекурсивно вызываете ExitLabirint помечайте текущую позицию как пройденную а при возврате сбросте значение
Учиться, учиться и еще раз учиться
|
22.01.2009, 16:02 | #3 |
Регистрация: 22.01.2009
Сообщений: 7
|
Проверку легальности хода убрала (спасибо).
Но остается не понятно почему оно все равно присваивает flag значение 1, ведь если выхода нету то значение выхода не будет обозначено двойкой. |
22.01.2009, 17:05 | #4 |
Ну и что? :)
Форумчанин
Регистрация: 20.10.2008
Сообщений: 129
|
попробуйте пройтись пошагово - обычно помогает
Учиться, учиться и еще раз учиться
|
22.01.2009, 17:45 | #5 |
Регистрация: 22.01.2009
Сообщений: 7
|
вывела шаги, он у меня почему-то по единицам ходит.
теперь совсем запуталась, весь if проверяют на ноль, почему он туда идет все равно? |
22.01.2009, 20:09 | #6 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
И где у вас условие проверки ПОЛЯ на ноль? Я вижу только проверку на выход за пределы лабиринта.
|
22.01.2009, 23:49 | #7 |
Регистрация: 22.01.2009
Сообщений: 7
|
Вот исправленный код:
Код:
|
23.01.2009, 14:00 | #8 |
Ну и что? :)
Форумчанин
Регистрация: 20.10.2008
Сообщений: 129
|
в общем объясню на словах, писать код времени нет:
как надо организовать функцию. на входе она получает 2 параметра: x; y. первое действие проверяем флаг. если он false то проверяем явлются ли наши x и y концами (искомый выход) если да то флаг тру и выходим иначе делаем следующее, объясню для одной стороны для других аналогично если a[x+1][y] == 0 то a[x][y] = 2; poisk(x+1, y); a[x][y] = 0; т.е. когда начинаем рекурсию отмечаем пройденную клетку а когда возвращаемся сбрасываем ее. вот
Учиться, учиться и еще раз учиться
Последний раз редактировалось Ламер_001; 23.01.2009 в 14:02. |
27.01.2009, 20:57 | #9 |
Новичок
Джуниор
Регистрация: 27.01.2009
Сообщений: 2
|
Хочу предложить иной способ решения данной задачи.
Рекурсия это конечно хорошо, код программы получается маленький и компактный, но в данном случае я бы использовал "волновой метод". Сложность рекурсии О(2^N), "волновой метод" O(N*N). При большом желании могу написать код который выводит кратчайший путь или сообщение что пути нет в противном случае. |
27.01.2009, 23:49 | #10 |
Регистрация: 22.01.2009
Сообщений: 7
|
кратчайший путь не надо =) просто проверить есть ли он вообще =)
но если есть готовый код то буду рада посмотреть. Здать все равно не успела, но решение интересно узнать. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выход из excel | Gawwws | Microsoft Office Excel | 1 | 19.10.2008 15:25 |
выход из рекурсии | L_M | Помощь студентам | 9 | 03.10.2008 18:03 |
Поиск выхода из лабиринта! Входными параметрами являются лабиринт, заданный массивом A[n][n] | Astor | Помощь студентам | 4 | 12.05.2008 16:45 |
Прохождение подземного лабиринта Джаффара | МаксимNEWProgramm | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 12.04.2008 19:52 |
Генерирование рандомного лабиринта | Djaconda | Паскаль, Turbo Pascal, PascalABC.NET | 12 | 12.11.2007 19:00 |