FloodFill,没什么好说的,因为油田面积不会超过100,所以dfs没有任何压力……
#include <cstdio>
#include <cstring>
#include <cstdlib>
int dx[10] = {0, 1, 1, 1, 0, 0, -1, -1, -1},
dy[10] = {0, -1, 0, 1, -1, 1, -1, 0, 1};
char g[110][110];
int n, m;
int f[110][110];
void dfs(int x, int y, int color) {
if (f[x][y]) return;
f[x][y] = color;
for (int i=1; i<=8; ++i) {
int xx = x+dx[i], yy= y+dy[i];
if ((xx<0) || (xx>=n) || (yy<0) || (yy>=m)) continue;
if ((!f[xx][yy])&&(g[xx][yy]=='@')) {
dfs(xx, yy, color);
}
}
}
void doit() {
char waste[50];
int c = 0;
scanf("%d%d", &n, &m);
gets(waste);
memset(f, 0, sizeof(f));
memset(g, 0, sizeof(g));
if (n==0) exit(0);
for (int i=0; i<n; ++i) {
gets(g[i]);
}
for (int i=0; i<n; ++i) {
for (int j=0; j<m; ++j) {
if ((!f[i][j]) && (g[i][j]=='@')) {
dfs(i,j,++c);
}
}
}
printf("%d\n", c);
}
int main() {
while(1) {
doit();
}
return 0;
}
大神们别鄙视我的代码……