代码随想录算法训练营第四十九天
prim算法精讲
最小生成树
文章讲解
#include<iostream>
#include<vector>
#include <climits>
using namespace std;
int main(){
int V,E;
int s,t,val;
cin>>V>>E;
vector<vector<int>> griph(V+1,vector<int>(V+1,10001));
while(E--){
cin>>s>>t>>val;
griph[s][t]=val;
griph[t][s]=val;
}
vector<bool> tree(V+1,false);
vector<int> mintree(V+1,10001);
//第一步
for(int i=1;i<V;i++){
int cur=-1;
int min_val=INT_MAX;
for(int j=1;j<=V;j++){
if(!tree[j] && mintree[j]<min_val){
cur=j;
min_val=mintree[j];
}
}
//第二步
tree[cur]=true;
//第三步
for(int j=1;j<=V;j++){
if(!tree[j] && griph[cur][j] < mintree[j]){
mintree[j] = griph[cur][j];
}
}
}
int res=0;
for(int i=2;i<=V;i++){
res+=mintree[i];
}
cout<<res;
return 0;
}