八方向 深搜
- #include
- #include
- #include
- #include
- 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;
- }
来源: http://www.bubuko.com/infodetail-3259298.html