![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
ShadowC |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
задача заключается вот в чем,лабиринт это двумерный массив символом 12x12 '.'-это пустая клетка. '#'-стена
char x[12][12]={{'#','#','#','#','#','#','#','#','#','#','#','#'},{'#','.','.','.','#','.','.','.','.','.','.','#'},{'.','.','#','.','#','.','#','#','#','#','.','#'},{'#','#','#','.','#','.','.','.','.','#','.','#'},{'#','.','.','.','.','#','#','#','.','#','.','.'},{'#','#','#','#','.','#','.','#','.','#','.','#'},{'#','.','.','#','.','#','.','#','.','#','.','#'},{'#','#','.','#','.','#','.','#','.','#','.','#'},{'#','.','.','.','.','.','.','.','.','#','.','#'},{'#','#','#','#','#','#','.','#','#','#','.','#'},{'#','.','.','.','.','.','.','#','.','.','.','#'},{'#','#','#','#','#','#','#','#','#','#','#','#',}}; это уже готовый лабиринт. нужно построить рекурсивную функцию нахождения пути из лабиринта,двигаться всегда надо касаясь правой рукой стены. мои соображения x[y][z] -может иметь лишь 4 возможных вариаций x[--y][z] x[++y][z] x[y][++z] x[y][--z] только как реализовать рекурсивную функцию используя это в голову не приложу,а самое главное,я не могу понять как выйти из такого рода рекурсивной функции когда работал с числами возвращалась единица,а что возвращать при работе с символами непонятно Это сообщение отредактировал(а) ShadowC - 24.10.2011, 18:14 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
я бы сказал x[y-1][z], x[y+1][z] и т.д. 1. определить, не находимся ли мы в выходе, т.е. если наши координаты либо 0 либо максимальное значение (11) 2. если нет, определить следующий допустимый шаг (y1, z1), т.е. рассмотреть последовательно варианты y+1, z+1, y-1, z-1. след. шаг допустим, если в новой позиции точка 3. вызвать себя рекурсивно с параметрами y1, z1 |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 3 Всего: 19 |
Это сообщение отредактировал(а) newbee - 24.10.2011, 18:25 -------------------- You're face to face With man who sold the world |
|||
|
||||
ShadowC |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
а как у тебя определяется куда должно быть совершено движение? и как у тебя определяется конечная позиция? Это сообщение отредактировал(а) ShadowC - 24.10.2011, 18:28 |
||||
|
|||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 3 Всего: 19 |
![]() Функции may_move_* определяют, можно ли из заданной точки двигаться в одну из сторон, то есть в реализации например may_move_right должна стоять проверка, не является ли символ справа от текущей позиции решеткой. is_finish определят, находится символ ли в текущей позиции в конце лабиринта, можешь в качестве конца использовать '$' и сверяться с ним, например. Это сообщение отредактировал(а) newbee - 24.10.2011, 18:42 -------------------- You're face to face With man who sold the world |
|||
|
||||
ShadowC |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
обьясни пожалуйста еще вот это
pos(pos.x-1,pos.y) дело в том что я с таким синтаксисом не знаком |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 3 Всего: 19 |
ShadowC, это псевдокод. Функция принимает текущую точку pos, которая характеризуется двумя координатами x и y. И далее она вызывает себя же с новой сдвинутой в одну из четырех сторон точкой.
Ну, например:
-------------------- You're face to face With man who sold the world |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Так нельзя - зациклишься.
Если делать перебор, начиная движения вниз, то: 1. делаем движение вниз; 2. попадаем в тупик; вызвращаемся вверх; 3. теперь опять путь вниз свободен - движемся вниз; ... При движении по правилу правой руки программируется примерно так:
Но и в этом случае возможны зацикливания - если в лабиринте есть внунтенние циклы. |
|||
|
||||
ShadowC |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
издиваешься? в условии задачи 1 функция котоая принимает двумерный массив и отправную точку и все |
||||
|
|||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
надо еще текущее направление хранить, иначе непонятно куда поворачивать
http://codepad.org/hXSmuTj8 писал наспех, но идея думаю понятна |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
||||
|
||||
ShadowC |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
в том-то и прикол что по условию задания должна быть 1 функция,я думаю это не просто так... |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
ShadowC, теперь с условием выхода прояснилось?
|
|||
|
||||
ShadowC |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
да так-то оно понятно,остается невыполненным одно условие задачи,которое я думаю там нелишнее,функция должна быть одна и принимать отправную точку и массив 12-12,я думаю вся сложность в выполнение именно этого условия |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
а что в моем примере не так? массив и точка передается в параметрах
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |