最小生成树算法模板
2017-07-25 15:46
417 查看
此处不解释算法,只写代码模板。
prim:
[b]Kruskal算法
prim:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int MAX=0x3f3f3f3f; int flag[101];//用来标记0和1 表示这个点是否被选择过 int map[101][101];//邻接矩阵用来存储图的信息 int dis[101];//记录任意一点到这个点的最近距离 int n;//点个个数 int prim() { int i,t; int sum=0; for(i=1; i<=n; i++) //初始化 { dis[i]=MAX; flag[i]=0; } for(i=1; i<=n; i++) { dis[i]=map[1][i]; //选定1为起始点,初始化 } dis[1]=0; flag[1]=1; int T=n-1; //循环找最小边,循环n-1次 while(T--) { t=MAX; int min=MAX; for(i=1; i<=n; i++) { if(flag[i]==0&&dis[i]<min) { t=i; min=dis[i]; } } if(t==MAX) break;//防止不成图 flag[t]=1; sum+=min; for(i=1; i<=n; i++)//添入新点后更新最小距离 { if(flag[i]==0&&dis[i]>map[t][i]) dis[i]=map[t][i]; } } if(t==MAX) cout<<"?"<<endl; else cout<<sum<<endl; } int main() { int a,b,c,d,m,i; while(cin>>n&&n)//n是点数 { m=n*(n-1)/2;//m是边数 memset(map,MAX,sizeof(map));//map是邻接矩阵存储图的信息 for(i=1; i<=m; i++) { cin>>a>>b>>c; if(c<map[a])//防止重边 map[a][b]=map[b][a]=c; } prim(); } }
[b]Kruskal算法
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n, m,sum; struct node { int start; int end; int power;//start为起始点,end为终止点,power为权值 } edge[5050]; int pre[5050]; bool cmp(struct node a,struct node b) { return a.power<b.power;//按照权值排序 } int find(int x)//并查集找祖先 { if(x!=pre[x]) pre[x]=find(pre[x]); return pre[x]; } void merge(int x,int y,int i)//并查集合并函数,n是用来记录最短路中应该加入哪个点 { int fx=find(x); int fy=find(y); if(fx!=fy) { pre[fx]=fy; sum+=edge[i].power; } } int main() { while(cin>>n&&n)//n是点数 { sum=0; m=n*(n-1)/2;//m是边数,可以输入 int i; int start,end,power; for(i=1; i<=m; i++) { cin>>start>>end>>power; edge[i].start=start,edge[i].end=end,edge[i].power=power; } for(i=1; i<=m; i++) { pre[i]=i; }//并查集初始化 sort(edge+1, edge+m+1,cmp); //对权值进行排序 for(i=1; i <= m; i++) { merge(edge[i].start,edge[i].end,i); } cout<<sum<<endl; } return 0; }
相关文章推荐
- 求解最小生成树的算法 prim算法(附模板)
- 最小生成树之算法记录【prime算法+Kruskal算法】【模板】
- 最小生成树之算法记录【prime算法+Kruskal算法】【模板】 .
- 最小生成树Prime算法(模板)
- 最小生成树 Kruskal 算法模板
- Kruskal(克鲁斯卡尔) 最小生成树 算法详解+模板
- 最小生成树算法模板
- 最小生成树之算法记录【prime算法+Kruskal算法】【模板】
- 求解最小生成树的算法 kruskal算法(附模板)
- 最小生成树之算法记录【prime算法+Kruskal算法】【模板】
- 算法提高 最小方差生成树(Kruskal)_模板
- 最小生成树问题 普利姆算法简单模板 hdoj1233
- 最小生成树之算法记录【prime算法+Kruskal算法】【模板】
- Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)
- 模板_krustra最小生成树算法
- 最小生成树-Kruskal算法(模板) 蓝桥杯 - 算法训练 - ALGO - 6 安慰奶牛(克鲁斯卡尔)
- POJ3164 最小树形图 有向图的最小生成树 模板题 朱刘算法 朱永津-刘振宏算法
- POJ-1251 Jungle Roads 最小生成树 两种算法的简单模板
- hdu 1863 畅通工程 最小生成树模板入门题 prim+kruskal两种算法AC。
- 最小生成树prime算法模板