#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; }
原文:https://www.cnblogs.com/zzyf/p/13392523.html