题目地址:http://codevs.cn/problem/1003/
分析:
prim
代码:
const
oo=10003;
var
i,j,n,ans:integer;
cost:longint;
ansg:array[1..10000,1..2] of byte;
g:array[1..100,1..100] of integer;
d:array[1..100] of longint;
procedure prim;
var
i,min,minp:integer;
v:array[1..100] of boolean;
pre:array[1..100] of integer;
begin
for i:=1 to n do d[i]:=oo;
d[1]:=0;
fillchar(v,sizeof(v),false);
fillchar(pre,sizeof(pre),0);
for i:=1 to n do
begin
min:=oo;
for j:=1 to n do
if (not v[j])and(d[j]<min) then
begin
min:=d[j]; minp:=j;
end;
v[minp]:=true;
if (pre[minp]<>0)and(g[pre[minp],minp]<>0) then
begin
inc(ans);
inc(cost,g[pre[minp],minp]);
if minp<pre[minp] then
begin ansg[ans,1]:=minp; ansg[ans,2]:=pre[minp]; end
else
begin ansg[ans,1]:=pre[minp]; ansg[ans,2]:=minp; end;
end;
for j:=1 to n do
if d[j]>g[minp,j] then
begin
d[j]:=g[minp,j];
pre[j]:=minp;
end;
end;
end;
begin
readln(n);
for i:=1 to n do
begin
for j:=1 to n do
read(g[i,j]);
readln;
end;
ans:=0; cost:=0;
prim;
writeln(ans);
for i:=1 to ans do
writeln(ansg[i,1],' ',ansg[i,2]);
writeln(cost);
end.