var
n,i,j,ans,cost:longint;
w:array[1..100,1..100] of longint;
d:array[1..100] of longint;
pre:array[1..100] of longint;
a,b:array[1..100] of longint;
used:array[1..100] of boolean;
procedure prim(x:longint);
var
i,k,pos,min:longint;
begin
ans:=0;
cost:=0;
fillchar(d,sizeof(d),0);
fillchar(used,sizeof(used),false);
used[x]:=true;
for i:=1 to n do
d[i]:=w[x,i];
for i:=1 to n do
pre[i]:=x;
for k:=1 to n-1 do
begin
min:=maxlongint;
fori:=1 to n do
if (not used[i]) and (d[i]<min)then
begin
min:=d[i];
pos:=i;
end;
used[pos]:=true;
ifw[pre[pos],pos]<>0 then
begin
inc(ans);
inc(cost,w[pre[pos],pos]);
ifpre[pos]<pos then
begin
a[ans]:=pre[pos];
b[ans]:=pos;
end
else
begin
a[ans]:=pos;
b[ans]:=pre[pos];
end;
end;
fori:=1 to n do
if (not used[i]) and(d[i]>w[pos,i]) then
begin
d[i]:=w[pos,i];
pre[i]:=pos;
end;
end;
writeln(ans);
for i:=1 to ans do
writeln(a[i],'',b[i]);
writeln(cost);
end;
begin
read(n);
for i:=1 to n do
for j:=1 to n do
read(w[i,j]);
prim(1);
end.{只要好好理解prim就行了,加油!}
wiki1003电话连线
最新推荐文章于 2025-04-30 21:43:36 发布