萌新求助~~
  • 板块灌水区
  • 楼主Tomwsc
  • 当前回复24
  • 已保存回复24
  • 发布时间2024/8/14 09:11
  • 上次更新2024/8/14 11:14:28
查看原帖
萌新求助~~
1418967
Tomwsc楼主2024/8/14 09:11

[题目点这里] (https://www.luogu.com.cn/problem/P1506)

求dalao帮忙看看,为什么样例都是对的但却WA呢

PS.小蒟蒻只学了手打队列,还不会STL呢

#include<bits/stdc++.h>
using namespace std;
int n,m,x[4]={0,1,-1,0},y[4]={1,0,0,-1},p[505],q[505],cnt;
char a[505][505];
bool flag[505][505]={false};
void bfs(int x1,int y1);
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=0;i<=m+1;i++)
	{
		a[0][i]='0';
	}
	for(int j=0;j<=n+1;j++)
	{
		a[j][0]='0';
	}
	for(int i=0;i<=n+1;i++)
	{
		if(a[i][1]=='0' && flag[i][1]==false)	bfs(i,1);
		if(a[i][m]=='0' && flag[i][m]==false)	bfs(i,m);
	}
	for(int i=0;i<=m+1;i++)
	{
		if(a[1][i]=='0' && flag[1][i]==false)	bfs(1,i);
		if(a[n][i]=='0' && flag[n][i]==false)	bfs(n,i);
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(a[i][j]=='0')	cnt++;
		}
	}
	cout<<cnt;
	return 0;
}
void bfs(int x1,int y1)
{
	int head=0,tail=1;
	p[1]=x1;
	q[1]=y1;
	do
	{
		head++;
		for(int i=0;i<4;i++)
		{
			int xx=p[head]+x[i],yy=q[head]+y[i];
			if(xx>=1 && xx<=n && yy>=1 && yy<=m && a[xx][yy]=='0' && flag[xx][yy]==false)
			{
				a[xx][yy]='*';
				flag[xx][yy]=false;
				tail++;
				p[tail]=xx;
				q[tail]=yy;
			}
		}
	}while(head<tail);
	return;
}
2024/8/14 09:11
加载中...