4.细胞
作者:互联网
分析:
是一个找连通块个数的板子题
实现:
在for循环里只要标记为零就是连通块,BFS进行标记
代码:
#include<iostream> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<queue> using namespace std; int n;int m; char map[505][505]; bool vis[505][505]; int cnt=0; struct note{ int a;int b; }; queue<note>q; int dx[5]={0,0,1,-1}; int dy[5]={1,-1,0,0}; bool bound(int nn,int mm) { if(nn>=1&&nn<=n&&mm>=1&&mm<=m) return 1; else return 0; } void BFS(int x,int y) { note t;t.a=x;t.b=y; q.push(t); while(!q.empty()) { int nowx=q.front().a; int nowy=q.front().b; q.pop();//注意位置!!! for(int i=0;i<4;i++) { int xx=nowx+dx[i]; int yy=nowy+dy[i]; if(bound(xx,yy)==1&&vis[xx][yy]==0&&map[xx][yy]!='0') { note k;k.a=xx;k.b=yy; q.push(k); vis[xx][yy]=1; } } } } int main() { cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>map[i][j]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(vis[i][j]==0&&map[i][j]!='0') BFS(i,j),cnt++; cout<<cnt; return 0; }
标签:include,nn,int,细胞,mm,&&,505 来源: https://www.cnblogs.com/xdzxxintong/p/16622977.html