【例8.2】细胞

  • 广搜之前没怎么弄明白
  • 重新刷刷,好像还是挺简单的

代码

#include
using namespace std;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int n,m,ans=0;
struct cyy{
	int x,y;
}q[1001000];
char a[1001][1001];
void bfs(int xx,int yy){
	int t=1,w=1;
	q[w].x=xx,q[w].y=yy;//加入队列 
	w++;
	while(t<w){//如果队列不为空 
		int x=q[t].x,y=q[t].y;
		a[x][y]='0';//防止重复 
		for(int i=0;i<4;i++){
			int nx=x+dx[i],ny=y+dy[i];
			if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]!='0') //旁边也是细胞 
				q[w].x=nx,q[w].y=ny,w++;//加入队列 
		}
		t++;//下一个 
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)//输入 
		cin>>a[i]+1;//从1开始 
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(a[i][j]!='0'){//未标记过的细胞 
				ans++;
				bfs(i,j);//广搜 
			}
	cout<<ans<<endl;
	return 0;
}

你可能感兴趣的:(广搜)