最小生成树 模板
来源:互联网 发布:第三方物流模式的优化 编辑:程序博客网 时间:2024/06/06 03:48
prim算法的时间复杂度
这里记顶点数v,边数e
邻接矩阵:O(v2) 邻接表:O(elog2v)
kruskal算法的时间复杂度
这里记顶点数v,边数e
邻接矩阵:O(v2) 邻接表:O(elog2v)
kruskal算法的时间复杂度
elog2e e为图中的边数(适用于边数少的)
//prim算法模板#include <iostream>#include <stdio.h>#include <cstring>using namespace std;int map[105][105],low[105],visit[105],x,y,pre[105];void prim(){ int pos,min; memset(visit,0,sizeof(visit)); visit[1]=1; pos=1; for(int i=1; i<=y; i++) { if(i!=pos) low[i]=map[pos][i]; } int ans=0; for(int i=1; i<y; i++) { min=100000000; for(int j=1; j<=y; j++) { if(visit[j]==0&&low[j]<min) { min=low[j]; pos=j; } } ans+=min; visit[pos]=1; for(int j=1; j<=y; j++) { if(visit[j]==0&&low[j]>map[pos][j]) low[j]=map[pos][j]; } } printf("%d\n",ans); return;}int main(){ int a,b,c,w; while(cin>>y) { for(int i=1; i<=y; i++) for(int j=1; j<=y; j++) { scanf("%d",&w); map[i][j]=w; } cin>>x; for(int i=1; i<=x; i++) { scanf("%d%d",&a,&b); map[a][b]=0; map[b][a]=0; } prim(); } return 0;}//Kruskal 模板# include<iostream># include<cstdio># include<cstring># include<algorithm>using namespace std;const int N=105;const int INF=1<<30;struct edge{ int fr,to,w,nxt; bool operator < (const edge &a) const { return w<a.w; }};int pre[N],n,head[N],cnt;edge e[N*(N-1)+5];void add(int fr,int to,int w){ e[cnt].fr=fr; e[cnt].to=to; e[cnt].w=w; e[cnt].nxt=head[fr]; head[fr]=cnt++;}int fin(int x){ if(x==pre[x]) return x; return pre[x]=fin(pre[x]);}void Kruskal(){ for(int i=1;i<=n;++i) pre[i]=i; sort(e,e+cnt); int ans=0; for(int i=0;i<cnt;++i){ int u=fin(e[i].fr); int v=fin(e[i].to); if(u!=v){ ans+=e[i].w; pre[u]=v; } } printf("%d\n",ans);}int main(){ int a,b,c; while(scanf("%d",&n)&&n) { cnt=0; int m=n*(n-1)/2; memset(head,-1,sizeof(head)); while(m--) { scanf("%d%d%d",&a,&b,&c); add(a,b,c); add(b,a,c); } Kruskal(); } return 0;}
阅读全文
0 0
- 最小生成树模板
- 最小生成树模板
- 最小生成树---模板
- 最小生成树模板
- 最小生成树 模板
- 最小生成树(模板)
- 最小生成树模板
- 最小生成树模板
- 最小生成树模板
- 最小生成树【模板】
- 最小生成树【模板】
- 最小生成树模板
- 最小生成树模板
- 最小生成树 模板
- 最小生成树模板.
- 最小生成树模板
- 【模板】最小生成树
- 最小生成树模板
- BZOJ 4989: [Usaco2017 Feb]Why Did the Cow Cross the Road
- PHP数组
- js的简单数组的应用
- java读取配置文件(Properties)
- C++ 类的成员变量和成员函数
- 最小生成树 模板
- Array对象自带的方法
- LeetCode 67. Add Binary
- JavaScript 中的递归和尾调用
- 白屏时间first paint 和可交互时间dom ready的关系是?
- hibernate对象的三种状态
- Java日记(2)—Java的基本语法元素
- spring aop 的简单应用
- ubuntu通过apt-get安装JDK8