求大佬指点
  • 板块题目总版
  • 楼主一苇可航
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/10/24 08:03
  • 上次更新2023/10/27 06:12:10
查看原帖
求大佬指点
33191
一苇可航楼主2022/10/24 08:03

这是题目

求大佬解答一下,第一个样例怎么算出来的周长22啊

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char map[1001][1001];
int zc,zcm,maxx,n,m;
void dfs(int x,int y)
{
	if(map[x][y]!='#'||x<=0||x>n||y<=0||y>n)
		return ;
	m++;
	map[x][y]='/';
	if(map[x+1][y]=='.')
	{
		zc++;
		map[x+1][y]='*';
	}
	if(map[x][y+1]=='.')
	{
		zc++;
		map[x][y+1]='*';
	}
	if(map[x-1][y]=='.')
	{
		zc++;
		map[x-1][y]='*';
	}
	if(map[x][y-1]=='.')
	{
		zc++;
		map[x][y-1]='*';
	}
	dfs(x+1,y);
	dfs(x,y+1);
	dfs(x-1,y);
	dfs(x,y-1);
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
			cin>>map[i][j];
	}
	for(int i=1;i<=n;i++)
	{
		map[0][i]='.';
		map[n+1][i]='.';
	}
	for(int i=0;i<=n;i++)
	{
		map[i][0]='.';
		map[i][n+1]='.';
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		if(map[i][j]=='#')
		{
			zc=0;
			m=0;
			int aa=0;
			dfs(i,j);
			aa=m;
			if(aa>maxx)
			{
				maxx=aa;
				zcm=zc;
			}
			else
			{
				if(aa==maxx)
				{
					if(zcm>zc)
						zcm=zc;
				}
			}
			for(int e=0;e<=n+1;e++)
			{
				for(int f=0;f<=n+1;f++)
				{
					if(map[e][f]=='*')
						map[e][f]='.';
				}
			}
		}
	}
	cout<<maxx<<" "<<zcm<<endl;
	return 0;
}

我的代码 面积没问题,周长推不出来

2022/10/24 08:03
加载中...