end;

{ Процедура расширения (экспансии) "империи", начиная с заданного узла arg }

procedure Expand(arg : PNode);

{ Взять из P_58_1,

выделенные там операторы для трассировочной распечатки удалить }

end;

      { Функция для формирования пути от центра империи к заданному узлу }

function MakePath(arg : PNode): string;

var p : PNode;

S : string;

begin

S:= arg^.mName;       { имя конечного узла }

p:= arg^.mPrev;       { указатель на предыдущий узел }

while Assigned(p) do begin       { пока не достигли корня }

S:= p^.mName +' -> '+ S;       { добавляем к пути имя узла }

p:= p^.mPrev;       { переход к следующему узлу }

end;

MakePath:= S;

end;

var F_In {, F_Out} : Text; { входной и выходной файла }

      C1, C2 : Char;       { названия стран "откуда" и "куда" }

      Start, Stop : PNode; { узлы "откуда" и "куда" }

begin {--- Главная программа ---}

{ Инициализация списка узлов и очереди узлов }

List:= nil; Que:= nil;

Assign(F_In, 'P_57_1.in');

ReadData(F_In);       { чтение графа }

{ Цикл ввода названий стран }

repeat

Write('Откуда= '); Readln(C1);

C1:= UpCase(C1);

if not (C1 in ['A'..'Z']) then break;

Write('Куда = '); Readln(C2);

C2:= UpCase(C2);

if not (C2 in ['A'..'Z']) then break;

Start:= GetPtr(C1);       { начальный узел }

Stop:= GetPtr(C2);       { конечный узел }

if Assigned(Start) and Assigned(Stop) then begin

{ если такие страны существуют, }

      InitList;       { устанавливаем начальные значения в полях узлов }

      Expand(Start); { расширяем "империю" от узла Start }

      Writeln (Stop^.mDist:3, ’’:3, MakePath(Stop));

end;

until false

end.

Вы читаете Песни о Паскале
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату