坐标2,1判断不对,其他都过了,求调
  • 板块P1331 海战
  • 楼主bzd_oik
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/6/20 21:20
  • 上次更新2025/6/21 16:43:45
查看原帖
坐标2,1判断不对,其他都过了,求调
1150796
bzd_oik楼主2025/6/20 21:20
#include<bits/stdc++.h>
using namespace std;
int al;
int book[10000][10000];
int a,c,ans;
char b[10000][10000];
int step[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
struct bode
{
	int x;
	int y;
};
void bfs(int x,int y)
{
	int maxn=x;
	int maxy=y;
	int sum=0;
	queue<bode>q;
	bode temp;
	temp.x=x;
	temp.y=y;
	q.push(temp);
	sum=1;
	while(!q.empty())
	{
		bode f;
		f=q.front();
		book[f.x][f.y]=2;
		q.pop();
		for(int i=0;i<4;++i)
		{
			bode xyb;
			xyb.x=f.x+step[i][0];
			xyb.y=f.y+step[i][1];
			if(xyb.x>=1&&xyb.x<=a&&xyb.y>=1&&xyb.y<=c&&book[xyb.x][xyb.y]==1)
			{
				if(xyb.x>maxn)
				{
					maxn=xyb.x;
				}
				if(xyb.y>maxy)
				{
					maxy=xyb.y;
				}
				temp.x=xyb.x;
				temp.y=xyb.y;
				q.push(temp);
				b[xyb.x][xyb.y]=2;
				sum++;
			}
		}
	}
	int pl=(maxn-x+1)*(maxy-y+1);
	if(pl==sum)
	{
		al=1;
	}
	else
	{
		al=0;
	}
}
int main()
{
	scanf("%d%d",&a,&c);
	for(int i=1;i<=a;++i)
	{
		for(int j=1;j<=c;j++)
		{
			scanf(" %c",&b[i][j]);
			if(b[i][j]=='#')
			{
				book[i][j]=1;
			}
		}
	}
	for(int i=1;i<=a;++i)
	{
		for(int j=1;j<=c;++j)
		{
			if(book[i][j]==1)
			{
				bfs(i,j);
				if(al==1)
				{
					ans++;
				}
				else
				{
					printf("%d  %d\n",i,j);
					printf("Bad placement.\n");
				}
			}
		}
	}
	printf("There are %d ships." , ans);
	return 0;
}
2025/6/20 21:20
加载中...