题目:http://acm.hdu.edu.cn/showproblem.php?pid=2952
水一道Dfs; 求羊群数量, 暴力标记跑一遍就OK.
#include <cstdio> #include <cstring> #include <iostream> using namespace std; char map[101][101]; int ac[4][2] = {0, 1, 0, -1, -1, 0, 1, 0}; int n, m; void Dfs(int x, int y) { int nx, ny; map[x][y] = '.'; for(int i = 0; i < 4; i++) { nx = x + ac[i][0]; ny = y + ac[i][1]; if(nx >= 0 && ny >= 0 && nx < n && ny < m && map[nx][ny] != '.') Dfs(nx, ny); } } int main() { int t; scanf("%d", &t); while(t--) { int cnt = 0; scanf("%d %d", &n, &m); for(int i = 0; i < n; i++) cin >> map[i]; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) { if(map[i][j] == '#') { Dfs(i, j); cnt++; } } printf("%d ", cnt); } return 0; }