不会吧,不会吧,我这怎么会WA,7,8,9三个点呢?
查看原帖
不会吧,不会吧,我这怎么会WA,7,8,9三个点呢?
346951
jjb_coder楼主2020/8/7 14:39
#include<iostream>
#include<queue>
//思路:从第一个w开始进行广搜,搜过的点进行标记,保证不会重复搜索
//进行了多少次bfs,答案就是几 
using namespace std;
queue<int>point_x,point_y;
int vis[105][105]={0};
char ch[105][105];
int m,n;
int ans=0;
int xx[]={1,1,1,0,0,-1,-1,-1};
int yy[]={0,1,-1,-1,1,1,0,-1};
void bfs()
{
	int i;
	int x,y,x0,y0;
	while(!point_x.empty())
	{
		x=point_x.front();
		y=point_y.front();
		for(i=0;i<7;i++)
		{
			x0=x+xx[i];
			y0=y+yy[i];
			if(x0>0&&x0<=m&&y0>0&&y0<=n&&!vis[x0][y0]&&ch[x0][y0]=='W')
			{
				point_x.push(x0);
				point_y.push(y0);
				vis[x0][y0]=1;	
			}
		}
		point_x.pop();
		point_y.pop();
	}
}
int main(void)
{
	int i,j;
	cin>>m>>n;
	for(i=1;i<=m;i++)
		for(j=1;j<=n;j++)
			cin>>ch[i][j];
	for(i=1;i<=m;i++)
		for(j=1;j<=n;j++)
		{
			if(ch[i][j]=='W'&&!vis[i][j])
			{
				vis[i][j]=1;
				point_x.push(i);
				point_y.push(j);
				bfs();	
				ans++;
			}
		}
	cout<<ans;
	return 0;
}

2020/8/7 14:39
加载中...