最短网络 Agri-Net

Kruskal
#include<bits/stdc++.h>
using namespace std;
int f[9999];
struct qwe
{
int x,y,z;
} w[9999];
int find(int xx)
{
if(xx!=f[xx])
{
f[xx]=find(f[xx]);
}
return f[xx];
}
int cam(qwe h, qwe k)
{
return h.z<k.z;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
f[i]=i;
}
int tot=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
int xx;
cin>>xx;
if(i<j)
{
tot++;
w[tot].x=i;
w[tot].y=j;
w[tot].z=xx;
}
}
}
sort(w+1,w+1+tot,cam);
int sum=0;
for(int i=1;i<=tot;i++)
{
if(f[find(w[i].x)]!=f[find(w[i].y)])
{
sum+=w[i].z;
f[find(w[i].x)]=f[find(w[i].y)];
}
}
cout<<sum<<endl;
return 0;
}
.Prim算法(普里姆算法)

Prim算法是通过每次添加一个新节点加入集合,直到所有点加入停止的 最小生成树的算法。
#include<bits/stdc++.h>
using namespace std;
int f[999][999],minn[99999];
int main()
{
int n;
cin>>n;
int tot=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
int xx;
cin>>xx;
f[i][j]=xx;
}
}
for(int i=1;i<=n;i++)
{
minn[i]=1e9;
}
int p[999];
memset(p,false,sizeof§);
minn[1]=0;
for(int i=1;i<=n;i++)
{
int k=0,maxx=1e9;
for(int j=1;j<=n;j++)
{
if(maxx>minn[j]&&p[j]==false)
{
k=j;
maxx=minn[j];
}
}
p[k]=true;
for(int j=1;j<=n;j++)
{
if(p[j]==false&&minn[j]>f[k][j])
{
minn[j]=f[k][j];
}
}
}
int sum=0;
for(int i=1;i<=n;i++)
{
sum+=minn[i];
}
cout<<sum<<endl;
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值