马上就快要考试了,然而突然发现自己图论已经废了,于是再都打一遍练练手。。。。。。

 const
maxn=;
maxe=maxn*maxn; type
edge=record //edge记录每一条边,a,b为它所连接的两个点,len为边长
a,b:longint;
len:longint;
end; var
edges:array[..maxe]of edge;
p,r:array[..maxn]of longint;
n,e:longint; procedure swap(a,b:integer);
begin
edges[]:=edges[a];
edges[a]:=edges[b];
edges[b]:=edges[];
end; procedure qsort(l,r:integer); //快排
var
i,j,mid,t:integer;
begin
mid:=edges[random(r-l+)+l].len;
i:=l; j:=r;
repeat
while edges[i]<mid do inc(i);
while edges[j]>mid do dec(j);
if i<=j then
begin
swap(i,j);
inc(i);
dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if r>i then qsort(i,r);
end; procedure init; //输入
var
i:integer;
begin
assign(input,'g.in');
reset(input);
readln(n,e);
for i:= to e do
readln(edges[i].a,edges[i].b,edges[i].len);
for i:= to n do
p[i]:=i;
randomize;
end; function find(x:integer):integer; //并查集:查找x的祖先
begin
if x<>p[x] then p[x]:=find(p[x]);
exit(p[x]);
end; procedure union(a,b:longint); //并查集:合并a,b所在的集合
var
t:integer;
begin
a:=find(a);
b:=find(b);
if r[a]>r[b] then
begin
t:=a;
a:=b;
b:=t;
end;
if r[a]=r[b] then inc(r[a]);
p[a]:=b;
end; procedure kruskal; //kruskal算法
var
en:longint; //记录当前为第几条边
count:longint; //记录当前加入了几条边
tot:longint; //记录当前已加入边的边权和
begin
count:=;
en:=;
tot:=; //初始化
while count<n- do //当已加入的边数小于(n-)个时
begin
inc(en);
with edges[en]do
begin
if find(a)<>find(b) then //如果a,b不在同一集合内
begin
union(a,b); //合并a,b
writeln(a,'--',b,':',len);
inc(tot,len);
inc(count);
end;
end;
end;
end; begin //main
init;
qsort(,e); //根据边长大小进行快排
kruskal;
end.

kruskal算法-Pascal的更多相关文章

  1. 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用

    图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...

  2. 最小生成树---Prim算法和Kruskal算法

    Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...

  3. 最小生成树的Kruskal算法实现

    最近在复习数据结构,所以想起了之前做的一个最小生成树算法.用Kruskal算法实现的,结合堆排序可以复习回顾数据结构.现在写出来与大家分享. 最小生成树算法思想:书上说的是在一给定的无向图G = (V ...

  4. 最小生成树——kruskal算法

    kruskal和prim都是解决最小生成树问题,都是选取最小边,但kruskal是通过对所有边按从小到大的顺序排过一次序之后,配合并查集实现的.我们取出一条边,判断如果它的始点和终点属于同一棵树,那么 ...

  5. Kruskal算法(三)之 Java详解

    前面分别通过C和C++实现了克鲁斯卡尔,本文介绍克鲁斯卡尔的Java实现. 目录 1. 最小生成树 2. 克鲁斯卡尔算法介绍 3. 克鲁斯卡尔算法图解 4. 克鲁斯卡尔算法分析 5. 克鲁斯卡尔算法的 ...

  6. Kruskal算法(二)之 C++详解

    本章是克鲁斯卡尔算法的C++实现. 目录 1. 最小生成树 2. 克鲁斯卡尔算法介绍 3. 克鲁斯卡尔算法图解 4. 克鲁斯卡尔算法分析 5. 克鲁斯卡尔算法的代码说明 6. 克鲁斯卡尔算法的源码 转 ...

  7. Kruskal算法(一)之 C语言详解

    本章介绍克鲁斯卡尔算法.和以往一样,本文会先对克鲁斯卡尔算法的理论论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 目录 1. 最小生成树 2. 克鲁斯卡尔算法介绍 3 ...

  8. 最小生成树问题---Prim算法与Kruskal算法实现(MATLAB语言实现)

    2015-12-17晚,复习,甚是无聊,阅<复杂网络算法与应用>一书,得知最小生成树问题(Minimum spanning tree)问题.记之. 何为树:连通且不含圈的图称为树. 图T= ...

  9. 学习笔记之 prim算法和kruskal算法

    ~. 最近数据结构课讲到了prim算法,然而一直使用kruskal算法的我还不知prim的思想,实在是寝食难安,于此灯火通明之时写此随笔,以祭奠我睡过去的数 据结构课. 一,最小生成树之prim pr ...

随机推荐

  1. CF Theatre Square

    Theatre Square time limit per test 2 seconds memory limit per test 64 megabytes input standard input ...

  2. poj 1987 树的分治

    思路:1741的A1送 1. #include<iostream> #include<cstring> #include<algorithm> #include&l ...

  3. ListView使用自定义适配器的情况下实现适配器的文本和图标控件点击事件执行Activity界面中的方法

    ListView使用的是自定义适配器,列表项的布局文件中含有文本和图标,实现文本区域和图标区域的点击事件. 实现思路:在自定义适配器MyArrayAdapter 类型中自定义接口和接口方法,分别设置文 ...

  4. truncate 函数用法示例

    --Oracle trunc()函数的用法 /**************日期********************/ select trunc(sysdate) from dual --2015- ...

  5. server 2003上为单点登录sso配置映射

    单点登录不是本人做的,代码需要调用类似 http://***.com/login.sso 的地址.要成功调用,需要在IIS设置.sso为后缀的映射项. Win7系统下一设置完,就能成功调用. 但是服务 ...

  6. MongoDB - Introduction to MongoDB, BSON Types

    BSON is a binary serialization format used to store documents and make remote procedure calls in Mon ...

  7. response小结(五)—通过response实现请求重定向

    请求重定向指的是一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向.302状态码和location头即可实现重定向. 请求重定向最常见的应用场景就是用户登录. 下面 ...

  8. 人生的抉择—aspx、ashx、asmx文件处理请求效率比较

    人生总是面临着许多抉择许多困惑!作为一名"攻城师"或"程序猿"的我们,工作的时候更是如此.你曾经是否苦恼过在系统中使用哪种文件编写客户端请求最合适或最高效呢?a ...

  9. oracle trunc 函数处理日期格式

    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;  --显示当前时间 2011-12-29 16:24:34 select trun ...

  10. SpringMVC接收多个对象

    问题背景: 要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该如何处理? 第1种方法:将Json对象序列化成Json字符串提 ...