POJ2386 Lake Counting (DFS)
2017-07-06 21:27
465 查看
Lake Counting
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.
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
Sample Output
Hint
OUTPUT DETAILS:
There are three ponds: one in the upper left, one in the lower left,and one along the right side.
Source
USACO 2004 November
思路:题目让求的就是水洼的个数,只有当池塘的八个方向都是陆地时该池塘才是水洼,也是说当'W'的上下左右,左上左下右上右下八个方向都是'.'时才符合题意。因此就可以从任意‘W’出发开始遍历八个方向,把遍历到的‘W’都改成‘.’,直到要遍历的都成了‘.’时遍历结束。dfs搜索的次数就是图中的水洼数目。
AC代码如下:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 35370 | Accepted: 17562 |
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 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
OUTPUT DETAILS:
There are three ponds: one in the upper left, one in the lower left,and one along the right side.
Source
USACO 2004 November
思路:题目让求的就是水洼的个数,只有当池塘的八个方向都是陆地时该池塘才是水洼,也是说当'W'的上下左右,左上左下右上右下八个方向都是'.'时才符合题意。因此就可以从任意‘W’出发开始遍历八个方向,把遍历到的‘W’都改成‘.’,直到要遍历的都成了‘.’时遍历结束。dfs搜索的次数就是图中的水洼数目。
AC代码如下:
#include <cstdio> using namespace std; const int MAX_N = 105; char map[MAX_N][MAX_N]; int n,m; void dfs(int x, int y){ map[x][y] = '.'; for(int i = -1; i <= 1; i ++){ for(int j = -1; j <= 1; j ++){ int dx = i + x, dy = j + y; if(dx >= 0 && dx < n && dy >= 0 && dy < m && map[dx][dy] == 'W') dfs(dx,dy); } } return ; } int main(){ while(~scanf("%d%d",&n,&m)){ for(int i = 0; i < n; i ++){ scanf("%s",map[i]); } int cnt = 0; for(int i = 0; i < n; i ++){ for(int j = 0; j < m; j ++){ if(map[i][j] == 'W'){ dfs(i,j); cnt ++; } } } printf("%d\n",cnt); } return 0; }
相关文章推荐
- POJ 2386 Lake Counting(DFS)
- POJ 2386 Lake Counting - DFS
- poj 2386:Lake Counting(简单DFS深搜)
- POJ 2386 Lake Counting(水淹菜地,DFS,八连通,连通分量)
- POJ 2386 Lake Counting(dfs)
- POJ 2386 Lake Counting (DFS)
- POJ-2386--Lake Counting---DFS(深搜)
- DFS 之 poj 2386 Lake Counting
- POJ 2386 Lake Counting(DFS:求8连通分量的个数)
- POJ 2386 Lake Counting 简单的DFS搜索
- POJ 2386 Lake Counting(经典dfs)
- POJ - 2386 Lake Counting (DFS)
- poj 2386 Lake Counting 【dfs(模板)】
- poj 2386 Lake Counting-----DFS
- DFS 之 poj 2386 Lake Counting
- POJ 2386 Lake Counting (DFS or BFS)
- POJ:2386 Lake Counting(dfs)
- POJ 2386 Lake Counting 简单的DFS搜索
- POJ 2386 Lake Counting(DFS)
- 【DFS】POJ 2386 Lake Counting