首页 > 代码库 > prim
prim
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<string> 6 #include<vector> 7 #include<set> 8 #include<map> 9 #include<queue>10 #include<stack>11 using namespace std;12 const int inf=0xffffff;13 const int MAXN=21;14 int edges[MAXN][MAXN];15 int lowcost[MAXN];16 int nearvex[MAXN];17 int n,m;18 void prim(int u0)19 {20 int i,j;21 int sum=0;22 for(i=1;i<=n;i++)23 {24 lowcost[i]=edges[u0][i];25 nearvex[i]=u0;26 }27 nearvex[u0]=-1;28 for(i=1;i<n;i++) //找出n-1个顶点 29 {30 int min=inf;31 int v=-1;32 for(j=1;j<=n;j++)33 {34 if(nearvex[j]!=-1&&lowcost[j]<min)35 {36 v=j;37 min=lowcost[j];38 }39 }40 if(v!=-1)41 {42 printf("%d %d %d\n",nearvex[v],v,lowcost[v]);43 nearvex[v]=-1;44 sum+=lowcost[v];45 for(j=1;j<=n;j++)46 {47 if(nearvex[j]!=-1&&edges[v][j]<lowcost[j])48 {49 lowcost[j]=edges[v][j];50 nearvex[j]=v;51 }52 }53 }54 }55 }56 int main()57 {58 int i,j;59 int u,v,w;60 scanf("%d %d",&n,&m);61 memset(edges,0,sizeof(edges));62 for(i=1;i<=m;i++)63 {64 scanf("%d%d%d",&u,&v,&w);65 edges[u][v]=edges[v][u]=w;66 }67 for(i=1;i<=n;i++)68 for(j=1;j<=n;j++)69 {70 if(i==j)71 edges[i][j]=0;72 else if(edges[i][j]==0)73 edges[i][j]=inf;74 }75 prim(1);76 return 0;77 }
prim
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。