根尖识别

#include<bits/stdc++.h>
using namespace std;
int m,n,a[311][311],poi_x[21],poi_y[21],nowdis,nx,ny,ansx,ansy,ansx2,ansy2,nowmin=9999999;
void fill()
{
	int filled=0;
	while(filled<20)
	{
		int tx=rand()%m+1,ty=rand()%n+1;
		if(!a[tx][ty])
		{
			filled++;
			poi_x[filled]=tx;
			poi_y[filled]=ty;
		}
	}
}
int calc_dist(int tx,int ty)
{
	fill();
	int total=0;
	for(int i=1;i<=10;i++)
	{
		total+=(tx-poi_x[i])*(tx-poi_x[i])+(ty-poi_y[i])*(ty-poi_y[i]);
	}
	return total;
}
int main()
{
	freopen("C:\\Users\\G_A_TS\\Desktop\\output23.txt","r",stdin);
	cin>>m>>n;
	ansx=16;ansy=62;
	for(int i=0;i<=310;i++)
		for(int j=0;j<=310;j++)
		{
			a[i][j]=1;
		}
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++)
			cin>>a[i][j];
	srand(1433);srand(rand());
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++)
		{
			if(a[i][j])
				continue;
			int dis=0;
			for(int h=1;h<=20;h++)
				dis+=calc_dist(i,j);
			dis/=20;
			if(dis>nowdis)
			{
				nowdis=dis;
				ansx=i;
				ansy=j;
			}
			if(dis<nowmin)
			{
				nowmin=dis;
				ansx2=i;
				ansy2=j;
			}
		}
	printf("%d %d\n",ansy,ansx);
	nowdis=0;
	for(int i=1;i<=m;i++)
	{
		for(int j=0;j<=30;j++)
		{
			a[i][ansy+j]=1; 
			a[i][ansy-j]=1; 
		}
	}
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++)
		{
			if(a[i][j])
				continue;
			int dis=0;
			for(int h=1;h<=20;h++)
				dis+=calc_dist(i,j);
			dis/=20;
			if(dis>nowdis)
			{
				nowdis=dis;
				ansx=i;
				ansy=j;
			}
		}
	printf("%d %d",ansy,ansx);
	return 0;
}

posted @ 2024-03-07 19:10  G_A_TS  阅读(12)  评论(0编辑  收藏  举报