Description
Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square contains either water ('W') or dry land ('.'). Farmer John would like to figure out how many ponds have formed in his field. A pond is a connected set of squares with water in them, where a square is considered adjacent to all eight of its neighbors.
Given a diagram of Farmer John's field, determine how many ponds he has.
Given a diagram of Farmer John's field, determine how many ponds he has.
Input
* Line 1: Two space-separated integers: N and M
* Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.
* Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.
Output
* Line 1: The number of ponds in Farmer John's field.
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
>>>>>>>>wa代码 比赛时坑死了 欲哭无泪啊》》》》》》》》》
#include<algorithm> #include<cstring> #include<cstdio> using namespace std; char str[220][220]; int used[220][220]; int n, m; int mx[8]={ 1, -1, 0, 0, 1, 1, -1, -1 }; int my[8]={ 0, 0, 1, -1, 1 -1, 1, -1 }; int ok( int xx,int yy ) { if( xx>=0&&xx<n&&yy>=0&&yy<m&&used[xx][yy]==0&&str[xx][yy]=='W' ) return 1; return 0; } void dfs( int x,int y) { int i ,j ; for( i=0;i<8;i++ ) { int xx=x+mx[i]; int yy=y+my[i]; if( ok( xx,yy ) ) { used[xx][yy]=1; dfs( xx,yy ); } } } int main() { int i, j, k, t, flag, p, q; while( scanf( "%d%d",&n,&m )!=-1 ) { int sum=0; memset( used, 0, sizeof( used ) ); for( i=0;i<n;i++ ) scanf( "%s",str[i] ); for( i=0;i<n;i++ ) { for( j=0;j<m;j++ ) { if( str[i][j]=='W'&&used[i][j]==0 ) { used[i][j]=1; dfs( i, j); sum++; } } } printf( "%d\n",sum ); } return 0; }
》》》》》》》》ac代码》》》》》》》》》》》》》
#include<algorithm> #include<cstring> #include<cstdio> using namespace std; char str[220][220]; int used[220][220]; int n, m; int mx[8]={ 1, -1, 0, 0, 1, 1, -1, -1 }; int my[8]={ 0, 0, 1, -1, 1, -1, 1, -1 }; int ok( int xx,int yy ) { if( xx>=0&&xx<n&&yy>=0&&yy<m&&used[xx][yy]==0&&str[xx][yy]=='W' ) return 1; return 0; } void dfs( int x,int y) { int i ,j ; for( i=0;i<8;i++ ) { int xx=x+mx[i]; int yy=y+my[i]; if( ok( xx,yy ) ) { used[xx][yy]=1; dfs( xx,yy ); } } } int main() { int i, j, k, t, flag, p, q; while( scanf( "%d%d",&n,&m )!=-1 ) { int sum=0; memset( used, 0, sizeof( used ) ); for( i=0;i<n;i++ ) scanf( "%s",str[i] ); for( i=0;i<n;i++ ) { for( j=0;j<m;j++ ) { if( str[i][j]=='W'&&used[i][j]==0 ) { used[i][j]=1; dfs( i, j); sum++; } } } printf( "%d\n",sum ); } return 0; }