最小生成树问题

最小生成树问题

问题背景

这是一个有关图论的问题。
原问题是城市里有若干户,现需要管道网来连接所有户。某些家庭之间有一个距离(也存在不相连接的,但所有的路径保证能连接所有的家庭),求最短需要总长为多长的管道才能将所有户连接起来。
抽象起来是在一个无向/有向图里面,每条线都有一个权值,求能将所有点连接起来的线的最小权值之和。

做法

这里用到了普利姆算法,就是假设一朵云,一个一个将点吞掉,但吞点的路径是权值之和最小,且能连接到所有点的n-1条边。云每吞掉一个点之前,判断最这个点与它所连接的点的距离,并找出距离最小的一个吞掉,然后继续此过程,直至所有点都在云内。

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define M 0x3f3f3f3f //定义一个正无穷的数 
using namespace std;
int n,s=0,map[101][101];
int res[1001],v[101]={
   0};//res数组用来记录云和云能够到的点的最短距离 
//v数组记录某个点是否可以访问 
int n
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值