#include <stdio.h>
#include <string.h>
#define MAX_N 100
#define DIRECTION_N 8
const int direction[DIRECTION_N][2] = {{1,0}, {-1,0}, {0,1}, {0,-1}, {1,1}, {-1,-1}, {1,-1}, {-1,1}}; //油田可以八个方向相邻
char map[MAX_N][MAX_N];
int row, col;
void dyeMap(int, int);
int main()
{
while (scanf("%d%d%*c", &row, &col) != EOF && row && col) {
memset(map, 0, sizeof(map)); //清零
int count = 0;
//输入地图
for (int r = 0; r < row; r++) {
for (int c = 0; c < col; c++) {
map[r][c] = getchar();
}
getchar(); // \n
}
//搜索石油,并“染色"
for (int r = 0; r < row; r++) {
for (int c = 0; c < col; c++) {
if (map[r][c] == '@') {
dyeMap(r, c);
count++;
}
}
}
printf("%d\n", count);
}
return 0;
}
//给地图染色BFS
void dyeMap(int r, int c)
{
if (map[r][c] != '@' || r < 0 || r >= row || c < 0 || c >= col) {
return;
}
map[r][c] = '*';
for (int i = 0; i < DIRECTION_N; i++) {
int tp_r = r, tp_c = c;
tp_r += direction[i][0];
tp_c += direction[i][1];
dyeMap(tp_r, tp_c);
}
}
一搜索到@立即进入“染色”标记, 油田数+1就行了。 属于简单DFS题目