Dijistra算法模版

来源:互联网 发布:淘宝美即面膜怎么样 编辑:程序博客网 时间:2024/06/15 06:09
{<dijistra><O(N*N)>}const     maxn=10000;type    link=^node;    node=record x,dis:longint; next:link; end;var{data of dijistra}   g:array[1..maxn] of link;   dist:array[1..maxn] of longint;   v:array[1..maxn] of boolean;   n:longint;procedure connect(i,x,dis:longint);var   p:link;begin     new(p);     p^.x:=x;     p^.dis:=dis;     p^.next:=g[i];     g[i]:=p;end;procedure upload(i:longint);var   p:link;begin     v[i]:=true;     p:=g[i];     while p<>nil do begin           if (not v[p^.x])and(dist[i]+p^.dis<dist[p^.x]) then dist[p^.x]:=dist[i]+p^.dis;           p:=p^.next;     end;end;procedure dijistra(s:longint);var   i,j,k,min:longint;begin     for i:=1 to n do begin dist[i]:=maxlongint; v[i]:=false; end;     dist[s]:=0; upload(s);     for i:=2 to n do begin         min:=maxlongint;         for j:=1 to n do             if (not v[j])and(dist[j]<min) then begin                k:=j; min:=dist[j];             end;         upload(k);     end;end;beginend.

原创粉丝点击