![]() |
|
Модераторы: Poseidon |
![]()
|
|
| student117 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.8.2011 Репутация: нет Всего: нет |
Робот идёт по лабиринту размером X на Y.
Начинает всегда в координате (1,0) (т.е. (1,0) всегда коридор). labirint[x][y] == 0 - стена labirint[x][y] == 1 - коридор Выход - 1 на краю лабиринта. Программа должна выводить координаты маршрута в виду (x1,y1)(x2,y2)...(xN,yN) Пример: 0,1,0,0,0,0, 0,1,1,1,0,0, 0,0,0,1,1,0, 0,1,1,1,0,0, 0,1,0,1,1,0, 0,1,0,0,0,0, Решение: (1,0)(1,1)(2,1)(3,1)(3,2)(3,3)(2,3)(1,3)(1,4)(1,5) Предпочтения: Алгоритм должен быть как можно проще. Читабельность важнее производительности. Как можно меньше спецефичного С++ кода. Я довел это до:
Код находит нужное решение при вызове move_robot(1, 0). Моя проблема в том, что print_solution() выводит: (1,0)(1,1)(2,1)(3,1)(3,2)(1,3)(2,3)(3,3)(1,4)(1,5) Т.е. координаты "перепутаны", когда робот идёт с Запада на Восток. Аналогично будет если маршрут на выход будет с Юга на Север. Есть идеи? Сортировка? Или надо перерабатывать алгоритм? Спасибо. Это сообщение отредактировал(а) student117 - 17.8.2011, 01:46 |
|||
|
||||
| t_gran |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 13.11.2007 Где: г.Усть-Илимск Репутация: 33 Всего: 37 |
student117, всё довольно просто. Сохраняйте пройденный путь в стеке. Стек можете сами реализовать, либо воспользоваться STL. Вот что у меня получилось исходя из вашего кода:
Правда путь выводится в обратном порядке, но для этого есть очередь. Ведь так?! Результат выполнения -------------------- Я знаю, что ничего не знаю© Сократ ![]() |
|||
|
||||
| student117 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.8.2011 Репутация: нет Всего: нет |
спасибо, t_gran
не успел пока разобраться/вникнуть, но первая реакция: 1. Stack на STL может быть посчитан за C++. Предпочтение отдаётся коду с наименьшим спецфичным С++ синтаксисом. 2. По всей видимости код использует координаты выхода. Условием задачи координаты вызода не даны. |
|||
|
||||
| student117 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.8.2011 Репутация: нет Всего: нет |
да, стэк работает.
в исходном коде на 25ой строке простое
и на 52ой
делают то что нужно. Разумеется по хорошему нужно делать StackPush(), StackPop(), IsStackFull(), IsStackEmpty() функционал. Просто добавлять эти строки не безопасно. t_gran, спасибо ещё раз за наводку. Это сообщение отредактировал(а) student117 - 18.8.2011, 00:53 |
||||
|
|||||
| Silent |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 6 Всего: 9 |
Для поставленной задачи необходимо использовать другой алгоритм - поиск не в глубину, а в ширину:
легко переделывается в чистый С (мне так кажется, хотя ни разу его не знаю) |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |