博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kruskal && Prim模板
阅读量:6989 次
发布时间:2019-06-27

本文共 1395 字,大约阅读时间需要 4 分钟。

1. Kruskal():

/*	Kruskal:并查集实现,记录两点和距离,按距离升序排序,O (ElogE)*/struct Edge	{	int u, v, w;	bool operator < (const Edge &r) const {		return w < r.w;	}}edge[E];sort (edge+1, edge+1+m);if (!uf.same (x, y))	uf.Union (x, y), ans += w;

 

 

2. Prim:

O (n ^ 2):

/*	Prim:Dijkstra思想,邻接矩阵实现,适合稠密图, O (n ^ 2)	不连通返回-1,或返回最小生成树长度(MST)*/int Prim(int s)	{	memset (vis, false, sizeof (vis));	memset (d, INF, sizeof (d));	d[s] = 0;	int ret = 0;	for (int i=1; i<=n; ++i)	{		int mn = INF, u = -1;		for (int i=1; i<=n; ++i)	{			if (!vis[i] && d[i] < mn)	mn = d[u=i];		}		if (u == -1)	return -1;		vis[u] = true;	ret += d[u];		for (int i=1; i<=n; ++i)	{			if (!vis[i] && d[i] > w[u][i])	{				d[i] = w[u][i];			}		}	}	return ret;}

 

O (ElogV):

/*	Prim:Dijkstra思想,优先队列优化,适合稀疏图,O (ElogV)	不连通返回-1,或返回最小生成树长度(MST)*/int Prim(int s)	{	memset (vis, false, sizeof (vis));	memset (d, INF, sizeof (d));	priority_queue
Q; for (int i=head[s]; ~i; i=edge[i].nex) { int v = edge[i].v, w = edge[i].w; if (d[v] > w) { d[v] = w; Q.push (Edge (v, d[v])); } } vis[s] = true; d[s] = 0; int ret = 0; while (!Q.empty ()) { int u = Q.top ().v; Q.pop (); if (vis[u]) continue; vis[u] = true; ret += d[u]; for (int i=head[u]; ~i; i=edge[i].nex) { int v = edge[i].v, w = edge[i].w; if (!vis[v] && d[v] > w) { d[v] = w; Q.push (Edge (v, d[v])); } } } return ret;}

  

转载于:https://www.cnblogs.com/Running-Time/p/4781736.html

你可能感兴趣的文章
针对IE6\7\8\9\10浏览器的CSS hack大全详解
查看>>
C++应用程序性能优化(二)——C++对象模型
查看>>
smarty 中一些方法的使用
查看>>
大型网站技术架构(五)网站高可用架构
查看>>
Maven学习总结(五)——聚合与继承
查看>>
LNMP架构 源码安装nginx+mysql+php+memcache+论坛
查看>>
Linux实用工具
查看>>
Spring学习总结(4)——Spring AOP教程
查看>>
通过JDBC向数据库中存储&读取Blob数据
查看>>
将博客搬至51CTO
查看>>
C++11: CAS
查看>>
我的友情链接
查看>>
pfSense book之证书管理
查看>>
haproxy日志问题解决
查看>>
AFNetWorking 2.0 使用
查看>>
VMware克隆Linux系统后,网络问题解决
查看>>
Linux系统下vsftp服务器搭建(二)
查看>>
Citrix User Profile Management 设定参考
查看>>
网络库性能对比
查看>>
博客开张
查看>>