как найти путь между связанными объектами

post

Новичок
как найти путь между связанными объектами

Здравствуйте, уважаемые программисты. Можете ругаться, я нисколько не обижусь, потому что понимаю
разницу между моим уровнем знаний и вашим. Поэтому всегда рад любым комментариям.
Как правильно задавать вопросы, я прочитал.

Попытаюсь объяснить понятно, что мне нужно.

У меня есть некоторые объекты (штук 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);
?>
но когда программа доходит до объекта, который больше ни с какими не связан, кроме предыдущего($start), она не переходит к внешнему циклу, в котором вызывалась функция search_way() а останавливается
 
Сверху