您的位置:首页 > 其它

codevs1003

2015-07-17 16:31 357 查看
题目地址: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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: