uva_572 - Oil Deposits
[cpp]
/* 题目大意:一块区域中分布着油田,连在一起就属于一个油田,求油田个数。
* 也就是求一个无向图的连通分支个数,直接dfs8个方向,水过。。。
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAX 101
#define DIR 8
char a[MAX][MAX];
int visited[MAX][MAX];
int dir[][2] = { www.zzzyk.com
{-1, -1}, {-1, 0}, {-1, 1}, {0, -1},
{0, 1}, {1, -1}, {1, 0}, {1, 1}
};
void DFS(int x, int y){
if( visited[x][y] || a[x][y] == '*' ) return ;
visited[x][y] = 1;
for(int i = 0; i < DIR; i ++)
DFS(x+dir[i][0], y+dir[i][1]);
}
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
freopen("test.in", "r", stdin);
#endif
int m, n, ans;
while( scanf("%d %d", &m, &n), m || n ){
ans = 0;
memset(a, '*', sizeof(a));
memset(visited, 0, sizeof(visited));
for(int i = 0; i < m; i ++){
getchar();
for(int j = 0; j < n; j ++){
scanf("%c", &a[i][j]);
}
}
for(int i = 0; i < m; i ++){
for(int j = 0; j < n; j ++){
if( a[i][j] == '@' && !visited[i][j] ){
ans ++;
DFS(i, j);
}
}
}
printf("%d\n", ans);
}
return 0;
}
补充:软件开发 , C++ ,