求助最小生成树模板
  • 板块灌水区
  • 楼主快乐一凡
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/1/26 20:53
  • 上次更新2023/10/28 10:50:18
查看原帖
求助最小生成树模板
502426
快乐一凡楼主2022/1/26 20:53

网址

#include <bits/stdc++.h>
using namespace std;
int n,m,mmin,t1,t2,t3;
int e[7777][7777],dis[7777],book[7777]={0};
int inf=9999999;
int main()
{
	int cnt=0,ssum=0;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(i==j)
			{
				e[i][j]=0;
			}
			else
			{
				e[i][j]=inf;
			}
		}
	}
	for(int i=1;i<=m;i++)
	{
		cin>>t1>>t2>>t3;
		e[t1][t2]=e[t2][t1]=t3;
	}
	for(int i=1;i<=n;i++)
	{
		dis[i]=e[1][i];
	}
	book[1]=1;
	cnt++;
	int j;
	while(cnt<n)
	{
		mmin=inf;
		for(int i=1;i<=n;i++)
		{
			if(book[i]==0 && dis[i]<mmin)
			{
				mmin=dis[i];
				j=i;
			}
		}
		book[j]=1;
		cnt++;
		ssum+=dis[j];
		for(int k=1;k<=n;k++)
		{
			if(book[k]==0 && dis[k]>e[j][k])
			{
				dis[k]=e[j][k];
			}
		}
	}
	cout<<ssum<<endl;
	return 0;
}

不知道为什么就只对了两组数据,求帮助。(样例数据可以通过)

2022/1/26 20:53
加载中...