post
Новичок
как найти путь между связанными объектами
Здравствуйте, уважаемые программисты. Можете ругаться, я нисколько не обижусь, потому что понимаю
разницу между моим уровнем знаний и вашим. Поэтому всегда рад любым комментариям.
Как правильно задавать вопросы, я прочитал.
Попытаюсь объяснить понятно, что мне нужно.
У меня есть некоторые объекты (штук 100).
Они соединены между собой. Причем не существует какой-либо иерархии их соединения. Они соединены непредсказуемо.
Нужно, чтобы программка находила всевозможные пути между двумя объектами.
Пользователь вводит номера объектов $start и $finish, нажимает отправить. И рисуются пути.
Что я сделал -
попытался воспользоваться рекурсией.
но к сожалению, как понял, вложенные циклы не работают как нужно.
То есть когда переберётся до конца самый внутренний цикл, программа "забывает" о внешних и останавливается..
Как можно иначе сделать, чтоб вложенные циклы формировались сами и при заканчивании внутреннего, выполнялся внешний?
Я больше ничего не придумал, только вот..
но когда программа доходит до объекта, который больше ни с какими не связан, кроме предыдущего($start), она не переходит к внешнему циклу, в котором вызывалась функция search_way() а останавливается
Здравствуйте, уважаемые программисты. Можете ругаться, я нисколько не обижусь, потому что понимаю
разницу между моим уровнем знаний и вашим. Поэтому всегда рад любым комментариям.
Как правильно задавать вопросы, я прочитал.
Попытаюсь объяснить понятно, что мне нужно.
У меня есть некоторые объекты (штук 100).
Они соединены между собой. Причем не существует какой-либо иерархии их соединения. Они соединены непредсказуемо.
Нужно, чтобы программка находила всевозможные пути между двумя объектами.
Пользователь вводит номера объектов $start и $finish, нажимает отправить. И рисуются пути.
Что я сделал -
попытался воспользоваться рекурсией.
но к сожалению, как понял, вложенные циклы не работают как нужно.
То есть когда переберётся до конца самый внутренний цикл, программа "забывает" о внешних и останавливается..
Как можно иначе сделать, чтоб вложенные циклы формировались сами и при заканчивании внутреннего, выполнялся внешний?
Я больше ничего не придумал, только вот..
PHP:
<?php
function search_way($start,$finish)
{ global $rem_st;
$db = mysql_connect($host_name,$user,$password) or die ("Couldn't connect db"); mysql_select_db('arrangement',$db));
for($i=0;$i<sizeof($start);$i++)
{
if($start[$i]==$finish) { /*ЧЕРТИМ ПУТЬ*/}
else
{// выбираю из базы соседние стартовому объекты
$query="select sh1,sh2 from links where sh1=$start[$i] or sh2=$start[$i]";
if ($result=mysql_query($query))
{
while($line=mysql_fetch_row($result))
{
if(isset($rem_st)) // $rem_st - массив, который запоминает в пройденные объекты стартовый
{
$x=array_intersect($rem_st,$line); // проверяем является ли объект пройденным
}
if($x==false) // если не является, то запоминаем его в массив $fstart
{
if($line[0]<>$start[$i])
{
$fstart[]=$line[0];
}
else
{
$fstart[]=$line[1];
}
}
}
static $k=0;
$rem_st[$k] = $start[$i]; //$rem_st - массив, который запоминает в пройденные объекты стартовый
$k++;
unset($start);
$start = $fstart; // обновляем массив $start (теперь в нем соседние объекты стартового)
unset ($fstart);
search_way ($start, $finish[0]) ; // теперь запускаем функцию с новым массивом $start
}
}
}
}
$start[0]=2;$finish=7;
return search_way($start,$finish);
?>