这里说一下这道题的唯一陷阱就是在输入的时候测试数据 m n后面是有空格的,如果你是用%c读入的话会直接读空格。
#include <iostream>
#include <cstdio>
using namespace std;
int m, n;
char map[100][100];
int move[8][2] = { {-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1} };
void DFS(int si, int sj) {
int i(0);
if (si >= m|| sj >= n || si < 0 ||sj < 0) return ;
for (i = 0; i != 8; ++i) {
int mi = si + move[i][0];
int mj = sj + move[i][1];
if (map[mi][mj] == '@') {
map[mi][mj] = '*';
DFS(mi, mj);
}
}
return ;
}
int main() {
while (scanf("%d%d", &m, &n), m) {
getchar();
int i(0), j(0);
for ( i = 0; i < m; ++i)
scanf("%s", map[i]);
int answer(0);
for (i = 0; i != m; ++i)
for (j = 0; j != n; ++j)
if (map[i][j] == '@') {
map[i][j] = '*';
DFS(i, j);
++answer;
}
printf("%d\n", answer);
}
}