最简单的单源最短路径算法

chossing 2002-08-19 09:37:07
单源最短路径算法有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.
...全文
119 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoukun666 2002-08-19
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/888/888772.xml?temp=.4991876

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧