标签:queue amp namespace void class span 请求 count www.
链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1249
题意:有一块N*M的土地,雨后积起了水,有水标记为‘W’,干燥为‘.’。八连通的积水被认为是连接在一起的。请求出院子里共有多少水洼?
第一行为N,M(1<=N,M<=110)。
下面为N*M的土地示意图。
一行,共有的水洼数。
10 12 W........WW. .WWW.....WWW ....WW...WW. .........WW. .........W.. ..W......W.. .W.W.....WW. W.W.W.....W. .W.W......W. ..W.......W.
3
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; int n,m; int mp[115][115]; queue <int> Q; int a[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,-1},{-1,1},{-1,-1},{1,1}}; //包括斜的 void bfs(int k) { while(!Q.empty()) { int x=Q.front();Q.pop(); int y=Q.front();Q.pop(); for(int i=0;i<8;i++) { int x1=x+a[i][0]; int yy1=y+a[i][1]; if(x1>0&&x1<=n&&yy1>0&&yy1<=m&&mp[x1][yy1]==0) { Q.push(x1);Q.push(yy1); mp[x1][yy1]=k; } } } } int main() { int ans=0; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { char a; cin>>a; if(a==‘.‘)mp[i][j]=-1; } int k=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(!mp[i][j]) { Q.push(i);Q.push(j); mp[i][j]=++k; bfs(k); } } cout<<k<<endl; }
标签:queue amp namespace void class span 请求 count www.
原文地址:http://www.cnblogs.com/EdSheeran/p/7631940.html