Гуманитарные основы комбинаторных алгоритмов - страница 6

Шрифт
Интервал



Описание для проверки на бумаге


На входе первый найденный путь x=abdef:


– Двигаемся справа налево по массиву х, выделяем два соседних элемента (кроме последнего) abd [e] f, левый (d) используем в качестве указателя на массив с вершиной, правый (e) в качестве указателя на элемент этого массива.

Ищем элемент в d после е, если он есть, убираем в x справа от e все элементы. Получаем в x=abde. Заменяем правый элемент (е) на найденный элемент.

– Дописываем (вторым циклом) правую часть от элемента (или индекса правого элемента), который был заменен и до последнего элемента (f). В этом цикле требуется брать всегда массивы с 0 индексом, так как массивы упорядочены по условию. В данном случае мы сразу получили в правой части последний элемент x=abdf, поэтому второй цикл сработает вхолостую.


– После формирования правой части возвращаемся к обходу массива справа налево.

Отсутствие элементов в первой вершине (массив а) – условие выхода из алгоритма.


Тот же код без функций и рекурсии, первый путь в x задан:

//Массивы ребер
$a=array (’b’,’c’,’d’);
$b=array (’d’,’e’,’f’);
$c=array (’d’,’e’,’f’);
$d=array (’e’);
$e=array (’f’);
//Первый путь
$x=’abdef’;
print $x;
print '
»;
$j=strlen ($x);
while ($j!=0) {