Подскажите пожалуйста алгоритм. Задачка следующая. Есть карта с комнатами (схематично ниже =] ), между некоторыми есть переходы, между некоторыми нет. Надо отыскать путь из любой выбранной комнаты в любую. Я сделал таблицу со всеми "дверьми" комнат:
id from to
1 1 2
2 1 5
3 2 1
4 3 7
5 4 8
6 5 1
7 5 9..
и так все.
Но дальше, как бы я не вызывал рекурсивно функцию она выдает ошибку endless рекурсии.. Подскажите, плз..
@find[f;t][tbl]$tbl[^table::sql{select * from tower where _from = $f}]^if($f == $t){$ok[1]}^if($ok == 0){^tab.append{$f}^tbl.menu{^if(!^tab.locate[old;$tbl._to]){^find[$tbl._to;$t]}}}
, но вопрос в том, как сохранить только правильный путь и отбросить ветви приводящие в тупик? Да, комнат всего 60, а не 12 как в примере, так что есть тупики..
У меня был похожий курсовик лет 5 назад. Алгоритма не найду, не сохранился, но кое-что могу рассказать:
1. Не берусь утверждать за оптимальность подхода, но теория предлагала нам решать такие задачи через матрицы смежности из теории графов. В вашем случае вершины графа это комнаты, а ребра двери меду ними. Матрица смежности это таблица, где в i-ой строке и j-ом столбце стоит 1, если вершины i и j смежны. В вашем случае для вершин 1-2-3-4-5-6-7-8 имеем что-то типа: