Процедура пробегает по вспомогательному списку узлов и спискам связей, распечатывая имена стран и их соседей.
Остальные детали алгоритма пояснены в программе «P_57_1».
{ P_57_1 – Ввод и вывод графа }
type PNode = ^TNode; { Указатель на запись-узел }
PLink = ^TLink; { Указатель на список связей }
TLink = record { Тип список связей }
mLink : PNode; { указатель на смежный узел }
mNext : PLink; { указатель на следующую запись в списке }
end;
TNode = record { Тип запись для хранения страны (узла графа) }
mName : Char; { Название страны (одна буква) }
mLinks: PLink; { список связей с соседями (смежными узлами) }
mNext : PNode; { указатель на следующую запись в списке }
end;
var List : PNode; { список всех стран континента (узлов графа) }
{ Функция поиска страны (узла графа) по имени страны }
function GetPtr(aName : char): PNode;
var p : PNode;
begin
p:= List; { поиск начинается с головы списка }
{ проходим по элементам списка }
while Assigned(p) do begin
if p^.mName= aName
then break { нашли! }
else p:= p^.mNext; { а иначе следующий }
end;
GetPtr:= p;
end;
{ Функция создает новую страну (узел), вставляет в глобальный список List
и возвращает указатель на новый узел }
function MakeNode(aName : Char): PNode;
var p : PNode;
begin
New(p); { создаем переменную }
p^.mName:= aName; { копируем имя }
p^.mLinks:=nil; { список связей пока пуст }
p^.mNext:= List; { указатель на следующий берем из заголовка }
List:= p; { заголовок указывает на новый узел }
MakeNode:= p; { результат выполнения функции }
end;
{ Процедура установки связи узла p1 с узлом p2 }
procedure Link(p1, p2 : PNode);
var p : PLink;
begin
New(p); { создаем переменную–связь }