prim+邻接矩阵,莫名的30分,求助QAQ
查看原帖
prim+邻接矩阵,莫名的30分,求助QAQ
267252
我叫XTJ楼主2022/6/25 17:37

60行代码,没用花里胡哨的优化。 如下:

#include<iostream>//PRIM
using namespace std;
int n,m,map[5010][5010],g[5010],s;//g存储使用情况(0已用,1未用),map存边权 
int dis[5010];//每个点到已完成部分的最小值 
void MST()
{
	g[1]=0;//以1起始点 
	for(int i=2;i<=n;i++)
	{
		dis[i]=map[i][1];
	}
	dis[0]=0x3f3f3f3f;//下标0不用,拿来做特判 
	for(int i=1;i<n;i++)//n-1条边 
	{
		int v=0;//特判值 
		for(int j=2;j<=n;j++)
		{
			if(dis[v]>dis[j]&&g[j])//找最小 
			{
				v=j;
			}
		}
		if(!v)
		{
			cout<<"orz"; 
			exit(0);//全局退出 
		}
		//操作一下 
		g[v]=0;
		s+=dis[v];
		for(int j=2;j<=n;j++)//更新 
		{
			if(g[j]&&dis[j]>map[v][j])
			{
				dis[j]=map[v][j];
			}
		}
	}
	return;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)//初始化 
	{
		for(int j=1;j<=n;j++)
		{
			map[i][j]=0x3f3f3f3f;
		}
		map[i][i]=0; 
		g[i]=1;
	}
	for(int i=1;i<=m;i++)
	{
		int a,b,c;
		cin>>a>>b>>c;
		map[a][b]=map[b][a]=c;
	}
	MST();
	cout<<s;
	return 0;
} 

蒟蒻看了半下午实在有点崩,于是乎请教巨佬~orz

2022/6/25 17:37
加载中...