http://acm.hdu.edu.cn/showproblem.php?pid=1241
//题意大致就是将矩形区域中有多少的@组成的区域,*为隔开的符号 //深度优先搜索,向八个方向有@的方向深入搜索,并且将其覆盖为* #include <iostream> #include <string> using namespace std; char M[101][101]; int dir[8][2] = {{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}}; int m, n; void search (int a, int b) { int i; if (M[a][b] == '*') return ; if (a < 0 || b < 0 || a > m || b > n) return ; if (M[a][b] == '@') { M[a][b] = '*'; for (i = 0; i < 8; i++) { search(a + dir[i][0], b + dir[i][1]); } } } int main() { int result; int i, j; string str; while (cin >> m >> n && (n+m)) { result = 0; memset (M, '*', sizeof(M)); for (i = 0; i < m; i++) { cin >> str; for (j = 0; j < n; j++) { if (str[j] == '@') M[i][j] = '@'; } } for (i = 0; i < m; i++) for (j = 0; j < n; j++) { if (M[i][j] == '@') { search(i, j); result ++; } } cout << result << endl; } return 0; }