标签:定义 畅通工程 输入 unit 归并 name inpu 不同的 时间复杂度
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int INF = 0x3f3f3f3f; 4 const int maxn = 105; 5 int n,a,b,c,mincost[maxn],cost[maxn][maxn]; 6 bool vis[maxn]; 7 int Prim(){//加点法 8 for(int i=1;i<=n;++i)//这里选取节点1作为起点,mincost为各节点到最小生成树节点集合的最小权值 9 mincost[i]=cost[1][i]; 10 mincost[1]=0;vis[1]=true;//标记已访问 11 int res=0;//计算最小生成树的权值 12 for(int i=1;i<n;++i){ 13 int k=-1;//标记为-1 14 for(int j=1;j<=n;++j)//找出到最小生成树节点集合的权值最小的还没入集合的一点 15 if(!vis[j] && (k==-1 || mincost[k]>mincost[j]))k=j; 16 if(k==-1)break;//如果还是-1,表示已经完成最小生成树的建立 17 vis[k]=true;//将节点k纳入最小生成树节点的集合 18 res+=mincost[k];//加上其权值 19 for(int j=1;j<=n;++j)//更新k的邻接点到最小生成树节点集合的最小权值 20 if(!vis[j])mincost[j]=min(mincost[j],cost[k][j]);//还没归纳的节点 21 } 22 return res; 23 } 24 int main() 25 { 26 while(~scanf("%d",&n) && n){ 27 memset(vis,false,sizeof(vis)); 28 for(int i=1;i<=n;++i){ 29 for(int j=1;j<=n;++j) 30 cost[i][j]=(i==j?0:INF); 31 } 32 for(int i=1;i<=n*(n-1)/2;++i){ 33 cin>>a>>b>>c; 34 cost[a][b]=cost[b][a]=c; 35 } 36 printf("%d\n",Prim()); 37 } 38 return 0; 39 }
AC代码之Kruskal算法:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,father[105],sum; 4 struct edge{int u,v,cost;}es[5000]; 5 bool cmp(const edge& e1,const edge& e2){ 6 return e1.cost<e2.cost; 7 } 8 void init_union_find(){//将每个节点当作根节点 9 for(int i=1;i<=n;++i)father[i]=i; 10 } 11 int find_father(int x){//递归查找根节点 12 if(father[x]==x)return x; 13 else return father[x]=find_father(father[x]); 14 } 15 void unite(int x,int y,int z){ 16 x=find_father(x); 17 y=find_father(y); 18 if(x!=y){//如果边的两端点的根节点不相同,即分别为非连通图,则可以归并 19 sum+=z;//加上最小权值 20 father[x]=y;//将x的父节点改成y 21 } 22 } 23 int main() 24 { 25 while(~scanf("%d",&n) && n){ 26 for(int i=1;i<=n*(n-1)/2;++i) 27 scanf("%d %d %d",&es[i].u,&es[i].v,&es[i].cost); 28 sort(es+1,es+n*(n-1)/2+1,cmp);//权值按从小到大排序 29 sum=0;init_union_find();//初始化 30 for(int i=1;i<=n*(n-1)/2;++i) 31 unite(es[i].u,es[i].v,es[i].cost); 32 printf("%d\n",sum); 33 } 34 return 0; 35 }
标签:定义 畅通工程 输入 unit 归并 name inpu 不同的 时间复杂度
原文地址:https://www.cnblogs.com/acgoto/p/9053764.html