【数据结构】MST-Kruskal

使用并查集

 1 var
 2    x1,x2,x3,n,m,i,j,mst:integer;
 3    head,tail,u,p:array[1..1000] of integer;
 4 procedure qsort(l,r:integer);
 5 var
 6     i,j,mid,temp:integer;
 7 begin
 8     i:=l;j:=r;mid:=(l+r) shr 1;
 9     repeat
10         while u[i]<u[mid] do inc(i);
11         while u[j]>u[mid] do dec(j);
12         if i<=j then
13         begin
14             temp:=head[i];head[i]:=head[j];head[j]:=temp;
15             temp:=tail[i];tail[i]:=tail[j];tail[j]:=temp;
16             temp:=u[i];u[i]:=u[j];u[j]:=temp;
17             inc(i);dec(j);
18         end;
19     until i>j;
20     if l<j then qsort(l,j);
21     if i<r then qsort(i,r);
22 end;
23 function find(k:integer):integer;
24 var
25     i:integer;
26 begin
27     if p[k]=k then exit(k);
28     p[k]:=find(p[k]);
29     exit(p[k]);
30 end;
31  
32 procedure union(a,b:integer);
33 var
34     i,x1,x2:integer;
35 begin
36     x1:=p[a];
37     x2:=p[b];
38     p[x1]:=x2;
39 end;
40 begin
41    assign(input,'mst.in');
42    reset(input);
43    readln(n,m);
44    for i:=1 to m do
45    begin
46       readln(x1,x2,x3);
47       head[i]:=x1;tail[i]:=x2;u[i]:=x3;
48    end;
49    close(input);
50    for i:=1 to n do p[i]:=i;
51     qsort(1,m);
52    for i:=1 to m do
53    writeln(head[i],',',tail[i],':',u[i]);
54     for i:=1 to m do
55     begin
56         if find(head[i])<>find(tail[i]) then
57         begin
58             union(head[i],tail[i]);
59             MST:=MST+u[i];
60         end;
61     end;
62    writeln(mst);
63 end.

 

转载于:https://www.cnblogs.com/OmegaIota/p/3255686.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值