end;
{ Процедура расширения (экспансии) "империи", начиная с заданного узла arg }
procedure Expand(arg : PNode);
var p : PNode;
q : PLink;
begin
arg^.mDist:= 0; { расстояние до центра империи = 0 }
arg^.mColor:= Gray; { метим серым цветом }
PutInQue(arg); { и помещаем в очередь обработки }
while GetFromQue(p) do begin { извлекаем очередной узел }
q:= p^.mLinks; { начинаем просмотр соседей }
while Assigned(q) do begin
if q^.mLink^.mColor = White then begin { если сосед ещё белый }
q^.mLink^.mColor:= Gray; { метим его серым }
q^.mLink^.mDist:= p^.mDist +1; { расстояние до центра }
q^.mLink^.mPrev:= p; { метим, откуда пришли }
PutInQue(q^.mLink); { и помещаем в очередь обработки }
end;
q:= q^.mNext; { переход к следующему соседу }
end;
p^.mColor:= Black; { после обработки узла метим его черным }
end;
end;
{ Инициализация списка узлов перед "постройкой империи" }
procedure InitList;
var p : PNode;
begin
p:= List; { начинаем с головы списка узлов }
{ проходим по всем элементам списка }
while Assigned(p) do begin
p^.mColor:= White; { цвет узла изначально белый }
p^.mDist := -1; { длина пути к узлу изначально -1 }
p^.mPrev := nil; { узел, из которого пришли в данный }
p:= p^.mNext; { следующий узел }
end;
end;
var F_In {, F_Out} : Text; { входной и выходной файла }
C : Char; { название страны }
Start : PNode; { узел, с которого начинается расширение "империи" }
begin {--- Главная программа ---}
{ Инициализация списка узлов и очереди узлов }
List:= nil; Que:= nil;
Assign(F_In, 'P_57_1.in');
ReadData(F_In); { чтение графа }