大佬救——命——啊——
查看原帖
大佬救——命——啊——
409774
Maysoul楼主2022/1/16 13:42

写了20分钟,查错两个小时的痛苦

写的BFS,从样例开始就一直在WA

大佬救救我

#include<bits/stdc++.h>
using namespace std;
int read()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-'){w=-1;}ch=getchar();}
	while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}
	return s*w;
}
bool e[200][200],p[200][200];
struct bfser
{
	int x,y;
}q[30000];
int xx[4]={0,1,-1,0};
int yy[4]={1,0,0,-1};
int xb=0;
void bfs(int x,int y)
{
	int h=0,t=1,x2,y2;
	xb++;
	q[1].x=x;
	q[1].y=y;
	while(h<t)
	{
		h++;
		x2=q[h].x;
		y2=q[h].y;
	}
	p[x2][y2]=1;
	for (int i=0;i<4;i++)
	{
		int x1=x2+xx[i];
		int y1=y2+yy[i];
		
		if(e[x1][y1]&&!p[x1][y1])
		{
			q[++t].x=x1;
			q[t].y=y1;
		} 
	}
}
int main()
{
	int n=read(),m=read(),a;
	for (int i=1;i<=m;i++)
	{
		for (int j=1;j<=n;j++)
		{
			scanf("%1d",&a);
			a!=0?e[i][j]=1:e[i][j]=0;
		} 
	}
	for (int i=1;i<=m;i++)
	{
		for (int j=1;j<=n;j++)
		{
			if(e[i][j]&&!p[i][j])
			{
				bfs(i,j);
			}
		}
	}
	cout<<xb<<endl;
	return 0;
}
2022/1/16 13:42
加载中...