#include<stdio.h>
#define MAX 100
#define M 1000000
int Creatcost(int cost[][MAX]) {
int vnum,anum,i,j,k,v1,v2,w;
printf("\n Please enter the number of vertices and edges:\n");
scanf("%d%d",&vnum,&anum);
for(i=0; i<vnum; i++) {
for(j=0; j<vnum; j++) {
cost[i][j]=M;
}
}
printf("Please enter each edge and weight (vertex sequence number starts from 1):\n");
for(k=0; k<anum; k++) {
scanf("%d%d%d",&v1,&v2,&w);
cost[v1][v2]=w;
cost[v2][v1]=w;
}
return vnum;
}
void Prim(int c[MAX][MAX],int n) {
int a,b;
int i,j,k,min;
int flag[n];//设置flag以便区分在生成树中的顶点和不在生成树中的顶点
flag[0]=-1;
for(k=0; k<5; k++) {
min=M;
for(i=0; i<n; i++) {//这一循环构成的顶点是在生成树中的
for(j=0; j<n; j++) {//这一循环构成的顶点是不在生成树中的
if(c[i][j]<min&&flag[i]==-1&&flag[j]!=-1) {
min=c[i][j];//寻找满足条件的最小权值
a=i;//给a,b赋值,以便输出
b=j;
}
}
}
flag[b]=-1;//将已经在生成树中的顶点标记为-1
printf("\n");
printf("(%d %d),%d",a,b,c[a][b]);
}
}
main() {
int n;
int cost[MAX][MAX];
n=Creatcost(cost);
printf("The result is:");
Prim(cost,n);
}
Prim求最小生成树算法
最新推荐文章于 2024-07-08 22:12:26 发布