Description
Given a diagram of Farmer John's field, determine how many ponds he has.
Input
* 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
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
There are three ponds: one in the upper left, one in the lower left,and one along the right side.
Source
這代碼是挑戰程序設計競賽裏的一份例題,代碼思路也是按照書上的寫的
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m;
char st[102][102];
int dir[8][2]= {{0,1},{0,-1},{1,0},{-1,0},{1,-1},{1,1},{-1,-1},{-1,1}};
void dfs(int x,int y) {
st[x][y]='.';
for(int i=0; i<8; i++) {
int newx=x+dir[i][0];
int newy=y+dir[i][1];
if(newx>=0 && newx <n && newy>=0 && newy <m && st[newx][newy]=='W') {
dfs(newx,newy);
}
}
return ;
}
int main() {
scanf("%d%d",&n,&m);
int ans=0;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
scanf(" %c",&st[i][j]);
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
if(st[i][j]=='W') {
dfs(i,j);
ans++;
}
printf("%d\n",ans);
}