版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weifenglin1997/article/details/82229922
Prim 算法
#include<iostream>
#include<cstdio>
using namespace std;
//Prinm构造最小生成树算法
/*
算法采用邻接矩阵的方法保存 图
以下为图的领接矩阵表
0 6 1 5 32767 32767
6 0 5 32767 3 32767
1 5 0 5 6 4
5 32767 5 0 32767 2
32767 3 6 32767 0 6
32767 32767 4 2 6 0
*/
#define INF 32767
#define MAXV 100
typedef struct
{
int edges[7][7];
int n;//节点数
int v;//边数
}MGraph;
void prim(MGraph g,int v){
int lowcost[50];
int closest[50];
int min,i,j,k;
for(i=0;i<g.n;i++){
lowcost[i]=g.edges[v][i];
closest[i]=v;
}
for(i=0;i<g.n;i++){
min=32767;
for(j=0;j<g.n;j++){
if(lowcost[j]!=0&&lowcost[j]<min){
min=lowcost[j];
k=j;
}
}
printf("边(%d,%d)权为:%d\n",closest[k],k,min);
lowcost[k]=0;//标记k已加入队列U
for(j=0;j<g.n;j++){
if(g.edges[k][j]!=0&&g.edges[k][j]<lowcost[j])
lowcost[j]=g.edges[k][j];
closest[j]=k;
}
}
}
int main(){
int gn ,edx;
cin>>gn;
MGraph g;
for(int i=0;i<gn;i++){
for(int j=0;j<gn;j++){
cin>>g.edges[i][j];
}
}
g.n=6;
g.v=10;
prim(g,0);
return 0;
}