kruscal 和 prim模板

来源:互联网 发布:手机蜂窝数据打不开 编辑:程序博客网 时间:2024/05/18 02:22

http://blog.csdn.net/wangjian8006/article/details/7875157

using namespace std;#define MAXM 900#define MAXV 30#define INF 1<<29int map[MAXV][MAXV],n,d[MAXV],vis[MAXV];void prim(){int i,j,mi,v;for(i=0;i<n;i++){d[i]=map[0][i];vis[i]=0;}for(i=1;i<=n;i++){mi=INF;for(j=0;j<n;j++){if(!vis[j]&&mi>d[j]){v=j;mi=d[j];}vis[v]=1;for(j=0;j<n;j++){if(!vis[j]&&d[j]>map[v][j]){d[j]=map[v][j];}}}}for(i=1;i<n;i++)d[0]+=d[i];cout<<d[0]<<endl;}typedef struct{int s,t,w;}Edge;int esum,set[MAXV];//顶点的总数为MAXV 边的总数为esumEdge edge[MAXM];//边集合int find(int x){if(x!=set[x]){return set[x]=find(set[x]);}elsereturn x;}bool Union(int a,int b){int fa,fb;fa=find(a);fb=find(b);if(fa==fb)return 0;set[fa]=fb;return 1;}//注意在调用Kruskal之前首先对边进行排序void kruskal(){int i,ans=0;for(i=0;i<esum;i++)//边的总数 esum{if(Union(edge[i].s,edge[i].t)){ans+=edge[i].w;}}cout<<ans<<endl;}int main(){return 0;}


原创粉丝点击