求助,感觉自己思路没错,但就是输出错误
查看原帖
求助,感觉自己思路没错,但就是输出错误
672757
封禁用户楼主2024/9/1 13:07
#include<bits/stdc++.h>
using namespace std;
const int M=505;
int n,m,s,t=1;
int nn[M][M];
struct bian
{
	int a,b,w;
}k;
vector<bian>bi;
int fx[5][2]={{},{1,0},{0,1},{-1,0},{0,-1}};
int fa[M];
int v[M][M];
bool cmp(bian a,bian b)
{
	return a.w<b.w;
}
int f(int x)
{
	return x==fa[x]?x:(fa[x]=f(fa[x]));
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		fa[i]=i;
		for(int j=1;j<=n;j++)
		{
			cin>>nn[i][j];
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			for(int f=1;f<=4;f++)
			{
				k.a=i+fx[f][0],k.b=j+fx[f][1];
				if(k.a<1||k.b<1||k.a>n||k.b>m||v[k.a][k.b]||v[k.b][k.a])
				{
					continue;
				}
				v[k.a][k.b]=v[k.b][k.a]=1;
				k.w=abs(nn[k.a][k.b]-nn[i][j]);
				bi.push_back(k);
				m++;
			}
		}
	}
	sort(bi.begin(),bi.end(),cmp);
	for(int i=0,x,y;i<m;i++)
	{
		x=f(bi[i].a),y=f(bi[i].b);
		if(x==y)
		{
			continue;
		}
		fa[y]=x;
		s+=bi[i].w;
		t++;
		if(t>=n*n/2)
		{
			break;
		}
	}
	cout<<s;
	return 0;
}
2024/9/1 13:07
加载中...