poj1258——Agri-Net

本文介绍了一个使用Prim算法求解最小生成树(MST)的具体实现。该算法在一个给定的N*N权重矩阵中寻找连接所有顶点且总权重最小的树。通过详细展示Prim算法的C++实现代码,读者可以了解到如何初始化距离数组、更新最短路径并最终得到最小生成树的总权重。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:给定一个N及N*N的矩阵,求最小生成树。

#include<cstdio> #include<iostream> using namespace std; #define maxcost 10000000 int g[105][105]; int n; int vis[105],dist[105]; void prim(int v) { int i,j,min,dis,ans=0; memset(vis,true,sizeof(vis)); for(i=0;i<n;i++) { dist[i]=g[v][i]; } dist[v]=0;vis[v]=false; for(i=0;i<n;i++) { min=maxcost;int k=i; for(j=0;j<n;j++) if(dist[j]<min&&vis[j]) { k=j;min=dist[j]; } if(min!=maxcost) ans+=min; vis[k]=false; for(j=0;j<n;j++) { if(vis[j]&&dist[j]>g[k][j]) dist[j]=g[k][j]; } } printf("%d\n",ans); } int main() { while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&g[i][j]); prim(0); } return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值