|
{本程序解决6个顶点之间的最短路径问题,各顶点间关系的数据文件在sj.txt中} {如果顶点I到顶点J不能直达就设置距离为30000} program dijkstra; type jihe=set of 0..5; var a:array[0..5,0..5] of integer; dist:array[0..5] of integer; i,j,k,m,n:integer; fv:text; s:jihe; begin s:=[0]; assign(fv,'sj.txt'); reset(fv); for i:=0 to 5 do {从文件中读数据,其中a[i,j]代表从顶点i到顶点j的直达距离,如果不通用30000代替} begin for j:=0 to 5 do read(fv,a[i,j]); readln(fv) end; for i:=1 to 5 do {设置DIST数组的初始值,即为顶点0到各顶点的直达距离(算法的第一步)} dist[i]:=a[0,i]; for i:=1 to 5 do begin m:=0; dist[m]:=30000; {设置DIST[M]的目的是为下面的一步做准备,即在DIST数组中一个最小的值}
for j:=1 to 5 do {算法的第二步,找最小的DIST值} if (not (j in s)) and (dist[m]>dist[j]) then m:=j ; {用M来记录到底是哪个顶点} s:=s+[m]; {把顶点加入S中}
for k:=1 to 5 do {算法的第三步,修改后面的DIST值} if (not (k in s)) and (dist[k]>dist[m]+a[m,k]) then dist[k]:=dist[m]+a[m,k] end; writeln('原各顶点间的路径关系是:(30000代表不通)'); for i:=0 to 5 do begin for j:=0 to 5 do write(a[i,j]:6); writeln end; writeln; writeln;
|