图论之kruskal算法
2016-08-01 15:32
471 查看
kruskal算法是一种生成最小生成树的经典算法,时间复杂度为eloge(e为边数)
此算法主要三部分组成:
for(i=1;i<=n;i++)
father[i]=i;//节点祖先初始化为其本身
2.<span style="white-space:pre"> </span>int find(int a)//判断两个子树是否是同一个祖先
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>if(a!=father[a])
<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>return father[a]=find(father[a]);//这里有个优化,每次返回就把对应路上的节点更新为祖先节点
<span style="white-space:pre"> </span> return father[a];
<span style="white-space:pre"> </span>}
3.
<span style="font-size:18px;">struct node
{
int st,en,len;//记录头结点,尾节点,节点间的边长
}edge[n*(n-1)/2];
int j;//记录边数,每次更新了一条边,j++
比如:edge[j].st=a;edge[j].en=b;edge[j].len=c;j++;
bool cmp(node a,node b)//结构体排序使用
{
if(a.len<b.len)
return 1;
else
return 0;
}
sort(edge+1,edge+1+j,cmp);//排序很重要,顺序排,保证kru算法的正确性</span>
此算法主要三部分组成:
for(i=1;i<=n;i++)
father[i]=i;//节点祖先初始化为其本身
2.<span style="white-space:pre"> </span>int find(int a)//判断两个子树是否是同一个祖先
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>if(a!=father[a])
<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>return father[a]=find(father[a]);//这里有个优化,每次返回就把对应路上的节点更新为祖先节点
<span style="white-space:pre"> </span> return father[a];
<span style="white-space:pre"> </span>}
3.
void kru() { int sum=0; for(i=1;i<=j;i++)//j代表边数 { int xx=find(edge[i].st); int yy=find(edge[i].en); if(xx!=yy)//不是同一祖先说明可以连接这两个节点 { father[xx]=yy;//任意赋值都可 sum+=edge[i].len;//记录权值和 } } }当然这里还有要注意的地方,就是最先数据的输入:
<span style="font-size:18px;">struct node
{
int st,en,len;//记录头结点,尾节点,节点间的边长
}edge[n*(n-1)/2];
int j;//记录边数,每次更新了一条边,j++
比如:edge[j].st=a;edge[j].en=b;edge[j].len=c;j++;
bool cmp(node a,node b)//结构体排序使用
{
if(a.len<b.len)
return 1;
else
return 0;
}
sort(edge+1,edge+1+j,cmp);//排序很重要,顺序排,保证kru算法的正确性</span>
相关文章推荐
- 图论——最小生成树Kruskal算法模板
- 算法_图论-Kruskal算法
- 图论中最小生成树构造算法之Prim算法和Kruskal算法
- 图论(九)最小生成树-Kruskal算法
- 图论--kruskal算法
- 【图论--Kruskal算法】POJ 2075 Tangled in Cables
- 最小生成树之Kruskal算法(图论) By ACReaper
- [算法与数据结构] - No.9 图论(2)- 最小生成树Prim算法与Kruskal算法
- 图论-最小生成树-prime算法&Kruskal算法 c++
- 图论 Kruskal算法 并查集
- 【图论--Kruskal算法】CCF 201412-4 最优灌溉
- 图论 Kruskal算法 并查集
- 「图论」最小生成树-kruskal算法
- (复习)图论--最小生成树--Kruskal算法
- 图论算法——Kruskal算法
- 紫书第十一章-----图论模型与算法(最小生成树prim算法和kruskal算法)
- 《数据结构与算法分析:C语言描述》复习——第九章“图论”——Kruskal算法
- 【图论--Kruskal算法】POJ 1751 Highways
- 【图论】最小生成树之prim算法与kruskal算法
- 图论(1)-畅通工程