#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXVEX 30
#define MAXCOST 1000
void prim(int c[MAXVEX][MAXVEX],int n)
{
int lowcost[MAXVEX],closest[MAXVEX];
for(int i=2;i<=n;i++){
lowcost[i]=c[1][i];
closest[i]=1;
}
closest[1]=0;
for(int i=2;i<=n;i++)
{
int k=i,min;
min=MAXCOST;
for(int j=1;j<=n;j++)
{
if(closest[j]!=0&&lowcost[j]<min){
min=lowcost[i];
k=j;
}
}
printf("(%d,%d)",closest[k],k);
closest[k]=0;
for(int j=1;j<=n;j++)
{
if(closest[j]!=0&&c[k][j]<lowcost[j]){
lowcost[j]=c[k][j];
closest[j]=k;
}
}
}
}
int main()
{
int c[MAXVEX][MAXVEX];
int n,e;
scanf("%d%d",&n,&e);
memset(c,0,sizeof(c));
int x,y,w;
for(int i=0;i<e;i++)
{
scanf("%d%d%d",&x,&y,&w);
c[x][y]=w;
}
prim(c,n);
return 0;
}
//输入
//5 10
//1 2 6
//1 3 9
//2 4 7
//4 5 2
//5 3 3
//1 4 5
//1 5 13
//2 3 14
//2 5 8
//2 3 9
//输出数据
//(1,4)(4,2)(4,5)(4,3)
prim算法 最小生成树MST
最新推荐文章于 2024-05-20 22:12:48 发布