![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 01.11.2010
Сообщений: 9
|
![]()
Товарисчи. Занимаюсь поиском всех путей в лабиринте от точки до точки. Количество путей определить удалось. А вот координаты точек путей установить не удалось. Вот в этом загвозка момогите, а. Проблема именно в функции find_path(x,y). Так как используется рекурсия и с внутренними условиями, то не удаётся установить конкретные координаты пути. Помогите очень надо((((
Код:
|
![]() |
![]() |
![]() |
#2 |
Регистрация: 01.11.2010
Сообщений: 9
|
![]()
Помогите правильно вывести координаты пути.
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 01.11.2010
Сообщений: 9
|
![]()
Что же никто не может помочь мне?
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 13.11.2009
Сообщений: 121
|
![]()
На первый взгляд есть небольшая путаница с файнд паф. У Вас соут проходит? Как работает ваша программа? Пробовали ли делать дебаг?
http://www.delphikingdom.com/asp/vie...?catalogID=166 В вашем случае препятствие - непроходимая точка лабиринта. Последний раз редактировалось Jakethefish; 25.06.2011 в 01:40. |
![]() |
![]() |
![]() |
#5 |
Регистрация: 01.11.2010
Сообщений: 9
|
![]()
Она ищет все возможные пути от (2,0) до (4,2). Как ищется рекурсивно. как только точка оказывается (4,2) начинаются возвращаться координаты, с помощью вывода на экран. Но так как при каждом рекурсивном вызове функции поиска пути идёт разветвление на 4 части. и поэтому выводится куча значений. а не определённые пути. Что я тока не пробовал(((
|
![]() |
![]() |
![]() |
#6 |
Регистрация: 01.11.2010
Сообщений: 9
|
![]()
Может здесь рекурсия не подойдёт, а тогда как?
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 13.11.2009
Сообщений: 121
|
![]()
Немного непонятно зачем вам
Код:
Суть метода такова: если я куда-то иду, то клубок разматывается, если я пришел в тупик, то сматываю клубок. То есть в каком то массиве содержатся все пройденные комнаты. Вероятно вы можете создать пустую копию вашего лабиринта, двойной массив, в который вы будете записывать то куда шли, либо в него записывать только правильный путь, то есть перед return true. Это видимо вам и так известно. Получается ваша проблема в том, чтобы отобразить несколько путей, а не 1? Возможно тогда стоит попробовать что-то вроде такого: 0000 0001 0010 0011 и тд. Прям как задача по тер. веру. А что будет если я 4 раза пойду на север? 3 раза на север 1 раз на восток, 3 раза на север 1 раз на запад, 3 раза на север 1 раз на юг? Только у вас не 4 раза а предположим 100 раз. Реализуем циклами. Основная проблема - как не петлять. Решение - записываем куда мы уже ходили. Как-то так. Советую попробовать на лабиринте 2х2, и дальше уже увеличивать размер. Если вы будете соблюдать порядок, то сможете разматывать и сматывать "клубок", пока не упретесь в тупик либо пока не упретесь в "нитку". Хотя возможно есть и более лучшие варианты. |
![]() |
![]() |
![]() |
#8 |
Регистрация: 01.11.2010
Сообщений: 9
|
![]() Код:
|
![]() |
![]() |
![]() |
#9 | |
Регистрация: 01.11.2010
Сообщений: 9
|
![]()
Да я хочу отобразить все возможные пути. Дело в том что если в каждом условии сделать "return true" то тогда он найдёт тока один первый построенный путь. а если в конце проверять что хоть одно условие выполнилось:
Код:
Код:
В моей программе переписывается каждая пройденная свободная точка в "+" чтобы не пройти ещё раз её. А что значит : Цитата:
|
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 13.11.2009
Сообщений: 121
|
![]()
Просто если не сматывать клубок, то ваша программа в таком виде все и будет выводить. Возможно вам нужно делать "копию" вашего лабиринта когда программа доходит до нужной точки, тогда пути будут отображаться верно и потом выводить копии.
Да, вероятно слишком трудно объяснил. Мой способ не идеален, думаю есть что-то и лучше. Вы идете на север, упираетесь в стену, шаг назад, идете к примеру на восток шаг, и снова на север, если уперлись, то снова направо шаг, и снова на север, если упремся при повороте на юг, нужно вернуться и идти на юг. Хотя сейчас смотрю, и как-то не очень алгоритм. Кстати вероятно вариант с копией лабиринта самый лучший. То есть у вас есть функция print_maze к примеру. Когда у вас выполняется условие: Код:
Код:
Либо у вас есть какой-то массив\вектор который содержит текущий путь. Когда приходим к точке, то печатаем данный массив. Если мы ищем путь дальше, то есть делаем шаг назад и образуем ветвление, нужно удалить последний элемент массива пути. В принципе можно создать какую-то структуру типа linked list, и либо удалять либо добавлять в неё элементы. |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Си найти минимальный путь от точки до точки | dikr | Помощь студентам | 4 | 09.05.2010 11:58 |
Имеются координаты точки. Как проверить какого цвета соседние точки на форме? | Rin | Мультимедиа в Delphi | 2 | 10.11.2009 22:47 |
даны две точки. организовать движение из точки А в точку Б окружности! | Wi1D | Помощь студентам | 6 | 23.05.2009 19:55 |
Поиск точки (х;у) | Slavik | Microsoft Office Excel | 4 | 01.05.2009 10:48 |
Отбражение чисел - точки, это точки, а не запятые, обозначающие дробную часть | Дикий | Помощь студентам | 7 | 12.05.2008 17:57 |