</pre><pre>
#include<iostream>
using namespace std;
#define max 100
#define maxcost 10000
int graph[7][7]; //图
int prim(int graph[][7],int n)
{
int lowcost[max]; 记录以i为终点的边的最小权值,0表示 i 已加入树
int mst[max];
int i,j,min,minid,sum=0;
for(i=2;i<=n;i++)
{
lowcost[i]=graph[1][i]; //最短距离初始化为其他节点到1号节点的距离
mst[i]=1; //标记所有节点的起点为第一个节点
}
mst[1]=0; //1号节点加入生成树
cout<<"the prim is "<<endl;
for(i=2;i<=n;i++)
{
min=maxcost;
minid=0;
for(j=2;j<=n;j++)
{
if(lowcost[j]<min&&lowcost[j]!=0)
{
min=lowcost[j]; //找权值最小的边,同时排除已标记的顶点
minid=j;
}
}
cout<<mst[minid]<<" yu "<<minid<<" lian "<<min; //遍历与第一个节点相连的所有节点后,找到第二个节点
cout<<endl;
sum+=min;
lowcost[minid]=0; //第二个节点已加入,标记
for(j=2;j<=n;j++) //加入第二个节点后,迭代
{
if(graph[minid][j]<lowcost[j])
{
lowcost[j]=graph[minid][j];
mst[j]=minid;
}
}
}
return sum;
}
int main()
{
int m=6,n=10,i,j,k; 7个顶点,11条边
int cost;
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
{
graph[i][j]=maxcost;
}
graph[1][2]=10;
graph[1][4]=30;
graph[1][5]=45;
graph[2][1]=10;
graph[2][3]=50;
graph[2][5]=40;
graph[2][6]=25;
graph[3][2]=50;
graph[3][5]=35;
graph[3][6]=15;
graph[4][1]=30;
graph[4][6]=20;
graph[5][1]=45;
graph[5][2]=40;
graph[5][3]=35;
graph[5][6]=55;
graph[6][2]=25;
graph[6][3]=15;
graph[6][4]=20;
graph[6][5]=55;
cost=prim(graph,m);
cout<<"the prim cost is: "<<cost<<endl;
return 0;
}
运行结果: