#include <iostream>
using namespace std;
int a[1005][1005],b[1005],t,ans;
struct point
{
int s,e;
}p[1005];
void prime(int k)
{
int i,j,m,k1,mist[1005];
ans=0;
for(i=1;i<=t;i++)
{
b[i]=a[1][i];
mist[i]=1;
}
b[k]=0;
for(i=1;i<t;i++)
{
m=1<<20;
for(j=1;j<=t;j++)
if(b[j]!=0&&b[j]<m) m=b[j],k=j;
p[i].s=mist[k],p[i].e=k;
if(ans<b[k]) ans=b[k];
b[k]=0;
for(j=1;j<=t;j++)
if(b[j]>a[k][j]) {b[j]=a[k][j];mist[j]=k;}
}
}
int main()
{
int i,j,m,d;
while(cin>>t>>m)
{
for (i = 1; i <= t; i++)
for (j = 1; j <= t; j++)
a[i][j]=1<<29;
while(m--)
{
scanf("%d%d%d",&i,&j,&d); a[i][j]=d;a[j][i]=d;
}
prime(1);
cout<<ans<<endl<<t-1<<endl;
for(i=1;i<t;i++)
cout<<p[i].s<<' '<<p[i].e<<endl;
}
return 0;
}
poj 1861 prim求边
最新推荐文章于 2021-03-08 10:40:19 发布
本文介绍了一种使用C++编程语言解决最短路径问题的方法,通过定义结构体、实现质数筛选和路径优化算法,最终输出最优路径及其对应节点。此算法适用于求解多个节点间的最短路径问题。
666

被折叠的 条评论
为什么被折叠?



