最简单的单源最短路径算法
单源最短路径算法有Dijkstra和Floyd,Floyd比较简单但时间复杂度大O(n^3),而Dijkstra又比较复杂(很多我所见的程序都很复杂),要记下来确实很花工夫。下面给出一种较简单的Dijkstra算法程序(很容易记)。以供大家欣赏。
program
var map:array [1..100,1..100] of intger;{map[i,j]表示i到j的权值,等于0则无连接}
dis:array [1..100] of integer; {dis[i]}表示1到i的最短路径
ok:array [1..100] of boolean; {ok[i]表示i是否已找到最短路径}
n:integer;
procedure init;(略)
procedure dijkstra;
var time.pre,i:intger;
begin
fillchar (ok,sizeof(ok),false);
ok[1]:=true;
dis[1]:=0;
for I:=2 to n do dis[i]:=maxint;
pre:=1;
for time:=1 to n-1 do
begin
for I:=1 to n do
if (map[pre,i]>0) and (dis[pre]+map[pre,i])<dis[i]) then
dis[i]:=dis[pre]+map[pre,i];
pre:=0;
for I:=1 to n do
if (not ok[i]) and ((pre=0) or (dis[i]<dis[pre])) then
pre:=i;
ok[pre]:=true;
end;
begin {主程序}
init;
dijkstra;
writeln (dis[k]); {1到k的最短路径}
end.