DFS------Lake Counting
来源:互联网 发布:java中重载的用法 编辑:程序博客网 时间:2024/06/05 05:52
http://poj.org/problem?id=2386
Lake Counting
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 20206 Accepted: 10182
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.
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.
* 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:
bfs模板吧,做了一个小时,我也是无语.加了两个判断,应该是这两个判断弄混淆了.
再写一个判断试试看.第一个是
#include<iostream>using namespace std;char a[200][200];int n, m;void bfs(int i, int j){if (a[i][j] == '.')return;else{a[i][j] = '.';bfs(i + 1, j);bfs(i + 1, j + 1);bfs(i + 1, j - 1);bfs(i , j - 1);bfs(i , j + 1);bfs(i - 1, j+1);bfs(i - 1, j-1);bfs(i - 1, j);}}int main(){while (cin >> n >> m){memset(a, '.', sizeof(a));for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> a[i][j];}}int num = 0;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){if (a[i][j] == 'W'){bfs(i, j);num++;}}}cout << num << endl;}}
用vis标记
#include<iostream>using namespace std;char a[200][200];int vis[200][200];int n, m;void bfs(int i, int j){if (a[i][j] == '.'||i<1||i>n||j<1||j>m||vis[i][j]==1)return;else{vis[i][j] = 1;bfs(i + 1, j);bfs(i + 1, j + 1);bfs(i + 1, j - 1);bfs(i , j - 1);bfs(i , j + 1);bfs(i - 1, j+1);bfs(i - 1, j-1);bfs(i - 1, j);}}int main(){while (cin >> n >> m){memset(a, '.', sizeof(a));for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> a[i][j];}}memset(vis, 0, sizeof(vis));int num = 0;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){if (a[i][j] == 'W'&&vis[i][j]==0){bfs(i, j);num++;}}}cout << num << endl;}}
0 0
- POJ2386:Lake Counting(DFS)
- poj2386 Lake Counting DFS
- POJ - Lake Counting(DFS)
- Lake Counting DFS水题
- Lake Counting(DFS)
- DFS------Lake Counting
- POJ2386 Lake Counting(DFS)
- POJ2386 Lake Counting 【DFS】
- D - Lake Counting-dfs
- Lake Counting-DFS
- hdu dfs Lake Counting
- 2386 Lake Counting【dfs】
- 基础DFS-Lake Counting
- Lake Counting(dfs)
- lake counting(dfs)
- poj Lake Counting (dfs)
- POJ2386 Lake Counting (dfs)
- POJ2386 Lake Counting(dfs)
- POJ 2828 Buy Tickets; BOJ 494 Study sister's barbarian
- 06-3. 单词长度(15)
- Android自定义点击效果的ImageView
- 防止全局变量重复定义
- Frequent values
- DFS------Lake Counting
- python网页显示
- Objective-C语法之字符串那些事
- Android Activity总结
- 2014.8.17 周日-servlet对象
- Notification通知
- SIM900/SIM900A 模块实现收发短信,打电话
- Android之XML资源访问
- 求最值之差