1. 程式人生 > >prim 最小生成樹

prim 最小生成樹

void amp algo size div == class cin cto

#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 最小生成樹