![]() |
|
![]() ![]() ![]() |
|
cloun |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 18.12.2011 Репутация: нет Всего: нет |
Всех приветствую! Делаю задание на C++ Builder 6: найти кратчайший путь в лабиринте от текущего положения до выхода. Лабиринт сделал через StringGrid, где '0' – пустая область, куда можно делать ход, '1' — препятствие. Расставил препятствия вручную, так как иначе можно получить тупиковую ситуацию. Ячейка 1А — начало лабиринта, 5Е — выход. Минимальный путь — 2B, 3C, 4D. Максимальный — 2B, 1B, 1C, 1D, 1E, 2E, 3E, 4E. После нахождения кратчайшего пути заголовку Label присваивается координаты ячеек, входящих в этот самый путь. Понятно, чтобы найти минимальный маршрут, нужно организовать цикл с использованием алгоритма (например, волнового). С этим у меня и возникли проблемы. Почитал, посмотрел похожие темы — не помогло. Возможно, программирование не для меня или сказывается маленький опыт. От не понимания, что делать дальше, посмотрел как суммировать значения всех ячеек. Надеюсь, кто-нибудь подскажет как быть дальше. С уважением, Сергей.
![]()
Добавлено через 11 минут и 33 секунды нашел кое-что интересное: "Ставим в начальной точке число 2. Далее просматриваем весь массив. Если встречаем пустую клетку, у которой соседняя клетка равна 2, то ставим в эту клетку число 3. Затем ещё раз просматриваем, но уже ищем 3, а ставим 4. Это продолжается до тех пор, пока не поставим число в клетку конца пути. Если за просмотр не сделано ни одного изменения, то значит пути не существует.В полученной матрице получить все кратчайшие пути - элементарно." Попробую реализовать, как и с суммированием всех значений ячеек. |
|||
|
||||
KTatsu |
|
||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 23.8.2008 Где: Москва Репутация: 1 Всего: 1 |
Не знаю, решил автор или нет, тем не менее, вопрос не помечен как решенный.
Я решил так: Таблица 10х10, нулевые ряды для имен линий, рабочее пространство лабиринта 9х9. Обзываю заголовки при создании формы:
Генерирую лабиринт, стены заполняются "X", пустые клетки остаются пустыми:
Используя принцип
И последний пункт, начиная от точки выхода ищу кратчайший путь по убыванию. Точки записываю в строки Memo. В клетках найденных точек ставлю значение "F" для наглядности, да и отладить это помогло один глюк ![]()
Единственный "косяк" в том, что в лабиринте используются диагонали, из-за этого в некоторых случаях при рассчете обратного пути получаются лишние повороты, когда можно пройти по прямой, тем не менее, путь от этого не становится длиннее по клеткам. P.S. Надеюсь более опытные программеры поправят меня, в чем я ошибся. Это сообщение отредактировал(а) KTatsu - 24.12.2011, 21:50 |
||||||||||
|
|||||||||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |