#include <iostream>//邻接表的最小生成树
#include <cstring>
#include <vector>
#include <cstdio>
#include <cstdlib>
#define INF 0x3f3f3f3f
using namespace std;
int n,m;
struct node{
int to,num;
};
vector<node>v[1010];
int prim(){
node d;
int visit[1010];
int len[1010];
int sum=0;
int mini,u;
memset(visit,0,sizeof(visit));
memset(len,INF,sizeof(INF));
visit[1]=1;
for(int i=0;i<v[1].size();i++){
d=v[1][i];
len[d.to]=d.num;
}
len[1]=0;
for(int j=1;j<n;j++){
mini=INF;
for(int i=1;i<=n;i++){
if(!visit[i]&&len[i]<mini){
mini=len[i];
u=i;
}
}
sum+=len[u];
visit[u]=1;
for(int i=0;i<v[u].size();i++){
d=v[u][i];
if(!visit[d.to]&&len[d.to]>d.num){
len[d.to]=d.num;
}
}
}
return sum;
}
int main(){
cin.sync_with_stdio(false);
int a,b,c;
while(cin>>n>>m){
for(int i=1;i<=n;i++){
v[i].clear();
}
for(int i=0;i<m;i++){
cin>>a>>b>>c;
node d;
d.to=b;
d.num=c;
v[a].push_back(d);
d.to=a;
v[b].push_back(d);
}
cout<<prim()<<endl;
}
return 0;
}
邻接表的最小生成树
最新推荐文章于 2023-12-23 10:21:03 发布