Программа кратчайшего пути на орграфе Program Short; {Кратчайшие пути на графе
- Категория
- Прочее
- Тип
- программа
- Страницы
- 2 стр.
- Дата
- 04.09.2013
- Формат файла
- .doc — Microsoft Word
- Архив
- 894088.zip — 6.54 kb
- programma-kratchajshego-puti-na-orgrafe-program-short-kratchajshie-puti-na-grafe_894088_1.doc — 29.5 Kb
- Readme_docus.me.txt — 125 Bytes
Текст работы
155
154
Глава 6. Введение в теорию графов. Алгоритмы на графах
6.9. Кратчайшие пути на графе
Алгоритм 6.12. Программа кратчайшего пути на орграфе
Program Short; {Кратчайшие пути на графе)
uses CRT,DOS;
Const
nVertex=50; {Максимальное количество вершин}
Type
TypeMark=array[0..nVertex] of Boolean; TypeDist=array[0..nVertex] of Longlnt; TypePrev=array[0..nVertex] of Integer; TypeWeight=array[0..nVertex,0..nVertex] of Integer;
Var
f :Text; { Текстовый файл }
nX :Integer; { Количество вершин в графе }
Mark :TypeMark; (Признаки временных и постоянных меток}
Dist :TypeDist; { Значения текущих меток вершин
(расстояния)}
Prev rTypePrev; { Указатель на ближайшую вершину } We :TypeWeight; { Матрица весов ребер графа } хО :Integer; { Вершина начала пути } z :Integer; { Вершина конца пути } у :Integer; (Последняя вершина с постоянной меткой}
исходных данных]
Read(f,xO); (Начальная вершина пути}
Read(f,z); (Конечная вершина пути}
Read(f,nX); (Количество вершин в графе}
пХ:=пХ-1; (* Х={О,1,2,...,пХ} - множество вершин *)
for i:=0 to nX do begin
for j:=0 to nX do begin
Read(f,We[i,j]); ( Ввод матрицы весов }
if We[i,j]=0 then We [i, j ] :=$7f f f; {-f бесконечность }
end; end;
Close(f);
Assign
(ft ' Short.out'); Rewrite(f); (Файл открыт для записи}
for x:=0 to nX do begin
Mark[x]:=FALSE; Distfx]:=$7fffffff; end;
у:=хО;
{Последняя вершина с постоянной меткой} Mark[у]:=TRUE; Dist[у]:=0;
while not Mark[z] do begin
{
for x:=0 to nX do if not Mark[x] and
( Dist[x]>Dist[y]+We[y,x] ) then begin Dist[x]:=Dist[y]+We[y,x]; Prev[x]:=y; end;
(Поиск вершины с минимальной временной меткой] weight:=$7fffffff;
for x:=0 to nX do if not Mark[x] then if weight>Dist[x] then begin weight:=Dist[x]; y:=x; end;
Mark[y]:=TRUE; end;
Write(f,'Вершины пути='); x:=z;
while x<>xO do begin Write(f,x:2); x:=Prev[x]; end;
WriteLn(f,x:2);
WriteLn(f,'Длина пути= \Dist[z]); Close(f); end.
Рассмотрим пример расчета по программе алгоритма 6.12 поиска кратчайшего пути на графе, показанном на рис. 6.21. Исходные данные графа представляются матрицей весов его ребер в текстовом файле Short.in со следующей структурой:
•
в первой строке определяется номер начальной вершины пути
х$\
•
во второй строке определяется номер конечной вершины пути z;
•
в третьей строке указывается количество
пХ вершин в графе;
•
в следующих «^строках определяются строки матрицы весов [w^] графа.
<</multicol>