Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 24280 | Accepted: 12255 |
Description
Input
Output
Sample Input
10 12 W........WW. .WWW.....WWW ....WW...WW. .........WW. .........W.. ..W......W.. .W.W.....WW. W.W.W.....W. .W.W......W. ..W.......W.
Sample Output
3
Hint
Source
USACO 2004 November稍改下用DFS也行,求有几部分
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<queue> #define INF 0x3f3f3f3f using namespace std; struct node { int x; int y; } p; queue<node>Q; int n,m; char a[200][200]; int dx[]= {-1,0,1,0,-1,-1,1,1}; int dy[]= {0,-1,0,1,1,-1,-1,1}; int panduan(int x,int y) { if(x<n&&y<m&&x>=0&&y>=0&&a[x][y]=='W') return 1; return 0; } int BFS(int x,int y) { if(!panduan(x,y)) return 0; a[x][y]='*'; Q.push(p); while(!Q.empty()) { node q=Q.front(); a[q.x][q.y]='*'; Q.pop(); for(int i=0; i<8; i++) { int fx=dx[i]+q.x; int fy=dy[i]+q.y; if(panduan(fx,fy)) { p.x=fx;p.y=fy; Q.push(p); } } } } int main() { while(~scanf("%d%d",&n,&m)) { if(!n&&!m) break; for(int i=0; i<n; i++) { scanf("%s",a[i]); } int num=0; for(int i=0; i<n; i++) for(int j=0; j<m; j++) { if(a[i][j]=='W')//看有几个连续的部分 { p.x=i; p.y=j; BFS(i,j); num++; } } printf("%d\n",num); } }