Kruskal&&prim
来源:互联网 发布:ubuntu 搜狗拼音 乱码 编辑:程序博客网 时间:2024/04/30 23:01
Prim算法和kruskal算法用在不同时候时间不同,前者适合稠密图(点多的图),后者适合稀疏图(边多的图)
如果题目数据比较大无法存邻接矩阵的形式,只能用后者,不然爆栈.
Prime算法
注意:map[N][N]要初始化为Inf
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<vector>
#include<queue>
#include<list>
using namespacestd;
typedef longlonglld;
typedef unsignedintud;
#define InfINT_MAX//int最大
#define Min(x,y)(x)<(y)?(x):(y)
#define Max(x,y)(x)>(y)?(x):(y)
#define PQpriority_queue
#define Qqueue
#define N102
int map[N][N];
int mark[N];
int low[N];
int n,m;
int prim(ints)
{
intres=0;
for(inti=1;i<=n;i++)
{
low[i]=map[s][i];
mark[i]=0;
}
low[s]=0;mark[s]=1;
intt=n-1;
while(t--)
{
intmin=Inf;
intk;
for(inti=1;i<=n;i++)
if(!mark[i]&&low[i]<min)
{
min=low[i];
k=i;
}
res+=low[k];
mark[k]=1;
for(inti=1;i<=n;i++)
{
if(!mark[i]&&map[k][i]<low[i])
low[i]=map[k][i];
}
}
returnres;
}
Kruskal算法(这个算法比较活,同样可以用在生成树的问题上)
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<vector>
#include<queue>
#include<list>
using namespacestd;
typedef longlonglld;
typedef unsignedintud;
#define InfINT_MAX//int最大
#define Min(x,y)(x)<(y)?(x):(y)
#define Max(x,y)(x)>(y)?(x):(y)
#define PQpriority_queue
#define Qqueue
#define N102
struct Node
{
intu,v;
intw;
}edge[N];
int parent[N];
int n,m;
void Init()
{
for(inti=0;i<n;i++)
parent[i]=-1;
}
int find(intx)
{
return parent[x]<0 ?x : find(parent[x]);
}
void merge(inta,intb)
{
if(parent[r1]>parent[r2])
{
parent[r1]=r2;
parent[r2]-=parent[r1];
}
else
{
parent[r2]=r1;
parent[r1]-=parent[r2];
}
}
int Kruskal()
{
intsumW=0;
Init();
for(inti=0;i<m;i++)
{
intu=find(edge[i].u);
intv=find(edge[i].v);
if(u!=v)
{
sumW+=edge[i].w;
merge(u,v);
}
}
returnsumW;
}
bool cmp(Noden1,Noden2)
{
returnn1.w<n2.w;
}
int main()
{
while(cin>>n&&n)
{
m=0;
for(intk=0;k<n-1;k++)
{
charch;
chara;
intt;
cin>>a>>t;
if(t==0)
continue;
while(t--)
{
charb;
intw;
cin>>b>>w;
edge[m].u=a-'A';
edge[m].v=b-'A';
edge[m++].w=w;
}
}
sort(edge,edge+m,cmp);
printf("%d\n",Kruskal());
}
return0;
}
- Prim Kruskal
- Kruskal&&prim
- Kruskal&Prim
- Prim&Kruskal
- kruskal&&prim
- Kruskal Prim Dijkstra
- Kruskal Prim Dijkstra
- poj2485 kruskal与prim
- ZOJ 1914 Prim Kruskal
- Prim算法+Kruskal算法
- prim + kruskal 实现
- poj1258Agri Net Kruskal+prim
- hdu 1863(prim&kruskal)
- HDU1879(水Kruskal、Prim)
- poj2421【MST-prim+Kruskal】
- Prim和kruskal
- MST (Kruskal Prim)
- prim和kruskal
- BIND DLZ PostgreSQL
- 关于两个activity之间切换时传递数值的情况(基于上一篇切换情况下)
- Ubuntu 11 编译 linux-2.6内核 出错,给出部分编译问题解决方暗,新问题求解决
- 提高Interface Builder高效工作的8个技巧
- tomcat使用memcached完成集群(session共享实现方式)
- Kruskal&&prim
- Bind dlz 测试手记
- 大唐天启元年
- 技术负责人的三种角色
- how to check which process occupied the port
- Sanliency detection ---my reading
- MYSQL 语句优化
- Android 高仿百度地图的LBS服务——基础地图篇(v 3.1.1)
- android 事件分发机制