站外题,求调(一本通)
  • 板块题目总版
  • 楼主l_615
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/9 20:20
  • 上次更新2023/11/9 21:36:28
查看原帖
站外题,求调(一本通)
622724
l_615楼主2023/11/9 20:20

说是站外题,其实就是P1457的弱化版

但是我就是看不出我代码哪出了问题37pts

#include<bits/stdc++.h>
using namespace std;
int a[100][100],r[10000][2],c[100][100][4],h,t,maxn,ans,n,m;
int fx[4]={0,-1,0,1};
int fy[4]={-1,0,1,0};
void bfs(int sx,int sy)
{
	h=t=1;
	r[t][0]=sx;
	r[t][1]=sy;
	int sum=0;
	while(h<=t)//遍历房间 
	{
		int x=r[h][0];
		int y=r[h][1];
		a[x][y]=1;
		sum++;
		for(int i=0;i<4;i++)
		{
			if(!c[x][y][i])
			{
				int tx=x+fx[i];
				int ty=y+fy[i];
				if(tx>0&&tx<=n&&ty>0&&ty<=m&&!a[tx][ty])
				{
					r[++t][0]=tx;
					r[t][1]=ty;
				}
			}
		}
		h++;
	}
	maxn=max(maxn,sum);
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			int x;
			scanf("%d",&x);
			for(int w=0;w<4;w++)
			{
				if(!x)break;
				c[i][j][w]=x&1;//建墙 
				x=x>>1;
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(!a[i][j])
			{
				bfs(i,j);//找房间 
				ans++;
			}
		}
	}
	printf("%d\n%d",ans,maxn);
}
2023/11/9 20:20
加载中...