prim 最小生成树
Posted tttfu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了prim 最小生成树相关的知识,希望对你有一定的参考价值。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<stack> #include<queue> #include<vector> #include<time.h> #define INF 0x3f3f3f using namespace std; int edge[1000][1000]; int lowcost[1000]; int index[1000]; int v,e,a,b,c; void prim() { int minm,idx; index[0]=0; lowcost[0]=0; for(int i=1; i<v; i++) { lowcost[i]=edge[i][0]; index[i]=0; }//初始化 for(int i=1; i<v; i++) { // cout<<endl; minm=INF; for(int j=1; j<v; j++) { // cout<<"=============="<<j<<" "<<lowcost[j]<<endl; if(lowcost[j]!=0&&lowcost[j]<minm) { minm=lowcost[j]; idx=j; // cout<<idx<<endl; } } // cout<<index[idx]<<" , "<<idx<<" "<<lowcost[idx]<<endl; lowcost[idx]=0; for(int j=1; j<v; j++) { if(lowcost[j]!=0&&edge[j][idx]<lowcost[j]) { lowcost[j]=edge[j][idx]; index[j]=idx; //cout<<"j "<<j<<endl; } } } for(int i=0; i<v; i++) { cout<<i<<"----->"<<index[i]<<endl; } } int main() { cin>>v>>e; memset(edge,INF,sizeof(edge)); for(int i=0; i<e; i++) { cin>>a>>b>>c; edge[a][b]=edge[b][a]=c; } prim(); }
/*
9 15
0 1 10
0 5 11
1 6 16
5 6 17
1 2 18
1 8 12
2 3 22
8 3 21
6 3 24
6 7 19
5 4 26
3 7 16
4 7 7
3 4 20
2 8 8
*/
以上是关于prim 最小生成树的主要内容,如果未能解决你的问题,请参考以下文章