重学搜索yi.2:Lake Counting--dfs
2016-07-23 17:10
453 查看
<挑战>p32
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
找了好久好久的bug呀~~~~结果是我的输入有问题~~醉醉的~~
Lake Counting
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 28942 | Accepted: 14490 |
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
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char lake[110][110];
int vis[110][110];
int coun = 0;
int n, m;
int dir[8][2] = {1, 1, -1, -1, 1, 0, 0, 1, -1, 0, 0, -1, 1, -1, -1, 1};
void findl(int x, int y)
{
int dx, dy;
for (int i=0; i<8; i++)
{
dx = dir[i][0] + x;
dy = dir[i][1] + y;
if (dx < n && dx >= 0 && dy < m && dy >= 0)
{
if (lake[dx][dy] == 'W' && !vis[dx][dy])
{
vis[dx][dy] = 1;
findl(dx, dy);
}
}
}
}
int main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
memset(vis, 0, sizeof(vis));
memset(lake, 0, sizeof(lake));
coun = 0;
getchar();
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
scanf("%c", &lake[i][j]);
}
getchar();
}
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
if (lake[i][j] == 'W' && !vis[i][j])
{
vis[i][j] = 1;
findl(i, j);
coun++;
}
}
}
cout << coun << endl;
}
return 0;
}
/*
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 110;
int n, m;
char filed[maxn][maxn+1];
void dfs(int x, int y)
{
filed[x][y] = '.';
for (int dx=-1; dx<=1; dx++)
{
for (int dy=-1; dy<=1; dy++)
{
int nx = x + dx;
int ny = y + dy;
if (nx>=0 && nx<n && ny>=0 && ny<m && filed[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 (filed[i][j] == 'W')
{
dfs(i, j);
res++;
}
}
}
printf("%d\n", res);
}
int main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
getchar();
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
scanf("%c", &filed[i][j]);
}
getchar();
}
solve();
}
return 0;
}*/
/*
10 12 W........WW. .WWW.....WWW ....WW...WW. .........WW. .........W.. ..W......W.. .W.W.....WW. W.W.W.....W. .W.W......W. ..W.......W.
*/
找了好久好久的bug呀~~~~结果是我的输入有问题~~醉醉的~~
相关文章推荐
- 浅谈OOP与AOP关系
- 我刚刚写了一个map的题目,还用到了#include<string>的头文件,下面我来总结一下 map<类型>变量 q q.find(找字符串) q.end()是否到达末尾
- SSH服务器拒绝了密码,xshell连不上虚拟机怎么办
- 一道阿里校春招笔试题
- Android手机耗电分析
- 013-句子逆序
- 智勇三国 单机小游戏
- iOS开发中的 并发编程锁
- HDU 1026 Ignatius and the Princess I【BFS+优先队列+栈路径输出】
- linux 內核用戶指導:內核配置、編譯,安裝(內核鏡像、設備樹Binaries、模組)
- 在屏幕中显示复选框
- Codeforces 701C They Are Everywhere(尺取/双指针)
- POJ 1017 Packets (贪心)
- nanoTime()和currentTimeMillis()的区别
- Android内存分析工具MAT
- 自定义渐变色的view,实现viewpager的滑动导航监听
- 012-字符串反转
- 洛谷P1346 电车题解
- 别的工程转到vs2008,发现错误:error C2668: “tan”: 对重载函数的调用不明确
- 阿里云虚机配置https访问[全程详细讲解]