Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 22269 | Accepted: 11226 |
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
#include<iostream> using namespace std; const int MAX = 110; char map[MAX][MAX]; int vis[MAX][MAX]; void dfs(int x, int y) { if(vis[x][y] == 1 || map[x][y] == '.'|| map[x][y] == 0) return;//若曾经访问过这个格子,或当前格子是空地,或者当前格子为0(即出界)则返回 vis[x][y] = 1; //递归访问周围8个格子 dfs(x-1,y-1); dfs(x-1,y); dfs(x-1,y+1); dfs(x,y-1); dfs(x,y+1); dfs(x+1,y-1); dfs(x+1,y); dfs(x+1,y+1); } int main() { memset(map,0,sizeof(map));//初始化为0,作为边界 memset(vis,0,sizeof(vis));//初始化为0,表示全未访问过 int m,n,cnt = 0; cin >> m >> n; for(int i = 1;i <= m;++i) for(int j = 1;j <= n;++j) cin >> map[i][j];//将地图放在矩阵中间,周围有一圈0,方便对出界的判断 for(int i = 1;i <= m;++i) for(int j = 1;j <= n;++j) { if(!vis[i][j] && map[i][j] == 'W')//若找到未被访问过的格子且当前格子是水 { ++cnt; dfs(i,j); } } cout << cnt <<endl; return 0; }
#include <iostream> #include <cstring> using namespace std; const int M = 120; char a[M][M]; int n, m; void dfs(int x, int y) { a[x][y] ='.'; for(int dx = -1; dx <= 1; dx++) { for(int dy = -1; dy <= 1; dy++) { int nx = x + dx, ny = y + dy; if(0 <= nx && nx < n && 0 <= ny && ny < M && a[nx][ny] == 'W') dfs(nx, ny); } } return ; } int main() { int res = 0; cin >> n >> m; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { cin >> a[i][j]; } } for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { if(a[i][j] == 'W') { dfs(i, j); res++; } } } cout << res << endl; return 0; }