八方向 深搜
#include <iostream> #include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; char maps[1050][1050]; int n,m,d[8]= {-1,-1,-1,0, 0, 1,1,1}; int z[8]= {-1, 0, 1,-1,1,-1,0,1}; //8个方向 void dfs(int x, int y) { maps[x][y] = '*'; //变为*,相当于走过 for (int i = 0; i < 8; i++) { int nx = x + d[i], ny = y + z[i]; if (0<=nx&&nx<m&&0<=ny&&ny<n) { if (maps[nx][ny]=='@') { dfs(nx, ny); } } } } int main() { while(~scanf("%d%d", &m, &n)&&(m || n)) { int count = 0; for(int i = 0; i < m; i++) scanf("%s", maps[i]); for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) { if(maps[i][j]=='@') { dfs(i,j); count++; } } printf("%d\n", count); } return 0; }