题解: 简单的dfs计数… 代码 #include<iostream> using namespace std; char map[20][20]; int W, H; void pos(char (*map)[20], int &sum, int dx, int dy) { if (map[dx][dy] == '.') { map[dx][dy] = '*'; sum++; if (dx >0) pos(map, sum, dx - 1, dy); if (dy>0) pos(map, sum, dx, dy - 1); if (dx < H - 1) pos(map, sum, dx + 1, dy); if (dy<W - 1) pos(map, sum, dx, dy + 1); } } int main() { int n, i, j, k,sum = 0,dx,dy; cin >> n; for (i = 0; i < n; i++) { cin >> W >> H; for (j = 0; j < H;j++) for (k = 0; k < W; k++) { cin >> map[j][k]; if (map[j][k] == '@') { dx = j; dy = k; map[j][k] = '.'; } } pos(map,sum,dx,dy); cout << "Case "<< i+1 << ": "<< sum << endl; sum = 0; } }