emmm最近写了 那个图论入门 找最短路径 Prim 适合比较稠密的图 Kru 适合边比较少的图

Prim :大体思路就是:
先建图 边代表权重,如果边不存在 那么它等于manx;
1:找一个点为起点
2.更新最短路径数组
3找到最短的边,加进去,标记那个点为已经用过
4以这个点为起点。
重复上述过程
最后的出来的图就是最小图 时间大概为o(n平方),因此一般用于稠密图
代码如下
d[a]就是指边的权重,每次加边都要更新
vis是指这个点有没有呗用过

define manx 9999999
void Prime(int a)(a为起点)
{
int ans,k,mine;//ans为最终结果 ,k为我这次要加的点 ,让vis【k】=0,以k为新点更新数组
memset(vis,0,sizeof(vis));//初始化数组
for(int i=0;i<n;i++)//初始化数组
d[i[=manx;
d[a]=0;
for(int i=0;i<n;i++)
{
mine=manx;
	for(int j=0;j<n;j++)
		{
		if(vis[j]==0&&d[i]<mine)
		{
		k=j;
		mine=d[i]
		}
vis[k]==1;
ans+=d[k];
			for(int i=0;i<n;i++)
			{
			if(!vis[i]&&w[k][i]<d[i])
			{
			d[i]=w[k][i];
			}

}

}

}

搞完了Prim 我们来搞一搞Kru吧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值