Prim笔记
概念
在一给定的无向图中,代表连接顶点 u 与顶点 v 的边,w(u, v) 代表此边的权重,若存在为的子集且不存在循环,使得的最小,则此为的最小生成树。
核心思想
通过每次寻找最短的与已标记的点有关联的边,不断更新直至最小权重生成树组成,
需要注意的是初始化,每一个初始化都至关重要。
代码
二话不说上代码?
Var n,i,j,tot,min,p,t:longint;
w:array[1..305,1..305] of longint;
flag:array[1..305] of boolean;
Begin
read(n);
for i:=1 to n do
Begin
for j:=1 to n do
Begin
read(w[i,j]);
if w[i,j]=0 then w[i,j]:=maxint;
end;
end;
flag[1]:=true;
t:=1;
while t<n do
Begin
min:=maxint;
p:=0;
for i:=1 to n do
Begin
if flag[i] then
Begin
for j:=1 to n do
Begin
if not flag[j] then
Begin
if w[i,j]<min then
Begin
min:=w[i,j];
p:=j;
end;
end;
end;
end;
end;
if p<>0 then
Begin
flag[p]:=true;
t:=t+1;
tot:=tot+min;
end;
end;
write(tot);
end.
PS:兴致一来就写了,希望能为某些朋友提供帮助吧

浙公网安备 33010602011771号