UVA-572 Oil Deposits
题目大意:求有多少个连通的油块(@表示油块)。
解题思路:先把图读进来,然后每次找到‘@’ 找它的八个方向是否为‘@’ 是则标记它被使用过 然后累加找到几次‘@’
/*************************************************************************
> File Name: UVA-572.cpp
> Author: Robin
> Mail: 499549060@qq.com
> Created Time: 2016年08月06日 星期六 13时54分01秒
************************************************************************/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int map[1000][1000];
string s[1000];
int m , n;
void dfs (int x, int y) {
if (map[x][y] == 0 || x < 0 || y < 0 || x >= m || y >= n) return;
map[x][y] = 0;
if ( s[x][y] == '@') {
dfs(x - 1, y);
dfs(x + 1, y);
dfs(x - 1, y - 1);
dfs(x - 1, y + 1);
dfs(x + 1, y - 1);
dfs(x + 1, y + 1);
dfs(x, y - 1);
dfs(x, y + 1);
}
}
int main () {
while (scanf("%d%d", &m, &n), n && m) {
memset(map, 1, sizeof(map));
int sum = 0;
for (int i = 0; i < m; i++)
cin>>s[i];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (s[i][j] == '@' && map[i][j]) {
dfs (i, j);
sum++;
}
}
}
cout<<sum<<endl;
}
}