#include<iostream>
#define INF 100 //找一个合适的值作为最大值,表示无边
using namespace std;
int n=4; //顶点数
int G[4][4]={
{INF,1,3,5},
{1,INF,2,INF},
{3,2,INF,4},
{5,INF,4,INF}
}; //图的邻接矩阵
int Prim(int v0){
int minCostPer[n],join[n];//minCostPer[]存的是各个顶点到已连接节点树的最小权重
int minValue,sum;
int v=v0;
for(int i=0;i<n;i++){
minCostPer[i]=G[v][i];
join[i]=0;
}
join[v]=1;
sum=0;
for(int i=0;i<n-1;i++){
minValue=INF;
for(int j=0;j<n;j++){
if(join[j]==0&&minCostPer[j]<minValue){
minValue=minCostPer[j];
v=j;
}
}
sum=sum+minValue;
join[v]=1;
for(int j=0;j<n;j++){
if(join[j]==0&&G[v][j]<minCostPer[j]){
minCostPer[j]=G[v][j];
}
}
}
return sum;//返回最小代价值
}
int main(){
cout<<"最小代价为:"<<Prim(0);//答案应为7
return 0;
}