//@author: yzj Date:2015/07/26
//sourse : http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82603#problem/H
//meaning: 经典找油田DFS问题
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
const int MAXN = 105;
int n, m;
char c[MAXN][MAXN];
void dfs(int x, int y)
{
c[x][y]='*';
for(int i = -1; i <= 1; i++)
{
for(int j = -1; j <=1; j++)
{
int nx = x+i, ny = y+j;
if(0<=nx&&nx<n&&0<=ny&&ny<m&&c[nx][ny]=='@')
{
dfs(nx, ny);
}
}
}
}
int main()
{
//freopen("f:/yzj/cppCode/input.txt", "r", stdin);
/*
又学到了一个小技巧:由于scanf函数不能自动忽略空格,所以在输入数字紧接着要
输入字符型char时,我们就需要小心了,不要读到空格或是回车
解决方法有两种:
1.使用getchar()函数
2.直接在%d或者是%c前面使用空格,就好了
*/
while(~scanf(" %d %d", &n, &m))
{
if(n == 0 && m==0) break;
//getchar();
for(int i = 0 ; i < n; i++)
{
for(int j = 0; j < m; j++)
{
scanf(" %c", &c[i][j]);
}
//getchar();
}
// for(int i = 0 ; i < n; i++)
// {
// for(int j = 0; j < m; j++)
// {
// cout << c[i][j];
// }
// cout << endl;
// }
int ans = 0;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
if(c[i][j]=='@')
{
dfs(i, j);
ans++;
}
}
}
printf("%d\n", ans);
}
return 0;
}
经典DFS--找油田---POJ 1562
最新推荐文章于 2019-03-09 11:32:58 发布