(POJ1562)计算一块区域有多少个不同的油田,周围8个方块相邻即为一个油田。*代表没有油田,@代表有油田。
#include <stdio.h>
char grid[101][101];
int m,n;
int dir[8][2] = {{-1,-1},{0,-1},{1,-1},{-1,0},{1,0},{-1,1},{0,1},{1,1}};
//相邻的8个方向
void dfs(int x,int y) {
grid[x][y] = '*';
for (int i = 0;i < 8;i++) {
int xx = x + dir[i][0];
int yy = y + dir[i][1];
if (xx<0 || xx>=m || yy<0 || yy>=n)
continue;
if (grid[xx][yy] == '@')
dfs(xx,yy);
}
}
int main () {
while (1) {
scanf ("%d %d",&m,&n);
if (m == 0) break;
for (int i = 0;i < m;i++)
scanf ("%s",grid[i]);
int count = 0;
for (int i = 0;i < m;i++) {
for (int j = 0;j < n;j++) {
if (grid[i][j] == '@') {
dfs(i,j);
count++;
}
}
}
printf ("%d\n",count);
}
return 0;
}