本文共 1954 字,大约阅读时间需要 6 分钟。
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.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.Output
* Line 1: The number of ponds in Farmer John's field.
Sample Input
10 12W........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
OUTPUT DETAILS:
There are three ponds: one in the upper left, one in the lower left,and one along the right side.解题思路:
深度优先遍历(或者广度优先遍历)即可,标准思路
#include#include #include using namespace std;const int MAXN = 110;char theMap[MAXN][MAXN];bool tvisited[MAXN][MAXN];int ans = 0;int N, M;int tx[8] = { 1,-1,1,-1,0,0,-1,1 };int ty[8] = { 0,0,1,1,1,-1,-1,-1 };void dfs_temp(int x, int y) { tvisited[x][y] = true; for (int i = 0; i < 8; ++i) { int newx = x + tx[i]; int newy = y + ty[i]; if (newx >= 0 && newx < N && newy >= 0 && newy < M && !tvisited[newx][newy] && theMap[newx][newy] != '.') { dfs_temp(newx, newy); } }}int main() { fill(tvisited[0], tvisited[0] + MAXN*MAXN, false); cin >> N >> M; for (int i = 0; i < N; ++i) { for (int j = 0; j < M; ++j) { cin >> theMap[i][j]; } } for (int i = 0; i < N; ++i) { for (int j = 0; j < M; ++j) { if (!tvisited[i][j] && theMap[i][j] != '.') { dfs_temp(i, j); ans++; } } } cout << ans << endl; system("PAUSE"); return 0;}
转载地址:http://ynxdb.baihongyu.com/