Prim算法模版
来源:互联网 发布:网络销售周总结范文 编辑:程序博客网 时间:2024/06/06 17:18
{<Prim><O(N*N)>}const maxn=10000;type link=^node; node=record x,dis:longint; next:link; end;var{data of prim} g:array[1..maxn] of link; dist:array[1..maxn] of longint; v:array[1..maxn] of boolean; n:longint;{connect line}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;{upload i}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(p^.dis<dist[p^.x]) then dist[p^.x]:=p^.dis; p:=p^.next; end;end;{function of mst}function mst:longint;var i,j,k,min:longint;begin for i:=1 to n do begin v[i]:=false; dist[i]:=maxlongint; end; mst:=0; dist[1]:=0; upload(1); for i:=2 to n do begin min:=maxlongint; for j:=2 to n do if (not v[j])and(dist[j]<min) then begin k:=j; min:=dist[j]; end; upload(k); inc(mst,min); end;end;