求最小生成树的标准程序(PASCAL语言)

来源:百度知道 编辑:UC知道 时间:2024/05/19 18:48:28

你是要prim还是kruskal?
两种算法适用范围不同
prim的时间复杂度是点的个数的平方
kruskal的时间复杂度是边的平方
kruskal如果用并查集优化,可以达到O(nlogn)的水平

我把两种算法的核心代码都贴出来吧:

procedure prim;
var
closest:array[1..maxv] of integer;
lowcost:array[1..maxv] of integer;
i,j,m,t:integer;
procedure init;
var
i:integer;
begin
for i:=1 to n do
closest[i]:=k;
for i:=1 to n do
if (cost[i,k]=0)and(i<>k)
then lowcost[i]:=maxint
else lowcost[i]:=cost[i,k];
end;

begin {main}
init;
for i:=1 to n-1 do
begin
t:=maxint;
for j:=1 to n do
if (lowcost[j]<>0)and
(lowcost[j]<t)
then begin
t:=lowcost[j];
m:=j;
end;
lowcost[m]:=0;
print;
for j:=1 to n do
if (cost[j,m]<>0)and
(lo