DFS
代码如下:
1 #include<iostream> 2 3 using namespace std; 4 5 int m, n; 6 char map[102][102]; 7 int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; //标记8个方向 8 9 void dfs(int x, int y) 10 { 11 int i, xx, yy; 12 for (i=0; i<8; i++) //扫描8个方向 13 { 14 xx=x+dir[i][0]; 15 yy=y+dir[i][1]; 16 if (xx < 0 || xx >= m || yy < 0 || yy >= n) // 判断是否出界 17 continue; 18 if (map[xx][yy] == '*') 19 continue; 20 map[xx][yy]='*'; //标记为已走过 21 dfs(xx, yy); //继续深搜 22 } 23 } 24 25 int main() 26 { 27 int i, j; 28 while(cin >> m >> n, m) 29 { 30 int cnt=0; 31 for (i=0; i<m; i++) 32 { 33 cin >> map[i]; 34 } 35 for (i=0; i<m; i++) 36 { 37 for (j=0; j<n; j++) 38 { 39 if (map[i][j] == '@') 40 { 41 dfs(i, j); 42 cnt++; 43 } 44 } 45 } 46 cout << cnt << endl; 47 } 48 return 0; 49 }