题目:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 21515 | Accepted: 10831 |
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
解题思路:简单的深度优先搜索。
代码:
#include<iostream> using namespace std; #define MAX_N 105 int N,M; char field[MAX_N][MAX_N + 1]; //园子 //现在位置(x,y) void dfs(int x, int y){ //将现在所在位置替换为 '.'。 field[x][y] = '.'; //循环遍历移动的8个方向 for(int dx=-1; dx<=1; dx++){ for(int dy=-1; dy<=1; dy++){ //向x方向移动dx, 向y方向移动dy,移动的结果为(nx,ny) int nx = x + dx, ny = y + dy; //判断(nx,ny)是不是在园子内,以及是否有积水 if(0<=nx && nx<N && 0<=ny && ny<M && field[nx][ny] == 'W') dfs(nx,ny); } } return; } void solve(){ int res = 0; for(int i=0; i<N; i++){ for(int j=0; j<M; j++){ if(field[i][j] == 'W'){ //从有W的地方开始dfs dfs(i,j); res ++; } } } printf("%d\n",res); } int main(){ //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); int i,j; while(cin>>N>>M){ for(i=0; i<N; i++){ for(j=0; j<M; j++){ cin>>field[i][j]; } } solve(); } return 0; }
原文地址:http://blog.csdn.net/realxuejin/article/details/42920119