书上给的解法是再弄一个数组标记是不是扫过了。我在挑战者程序设计上看到这道题可以把油田位置全部换成‘*’,这样就不用另一个数组了。
因为没有限制边界所以WA了好几次。边界问题我在以前一道题里也遇到过,看来一定要注意边界问题。
#include<iostream> #define dx (dr + i) #define dy (dc + j) #define MAXN 110 using namespace std; int m, n; char oil[MAXN][MAXN]; void dfs(int dr, int dc) { oil[dr][dc] = '*'; for(int i = -1; i <= 1; i++) for(int j = -1; j <= 1; j++) if(dx >= 0&& dx < m&& dy >= 0&& dy <n&& oil[dx][dy] == '@') dfs(dx, dy); return ; } int main() { while(cin >> m >> n&& m) { int ans = 0; for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) cin >> oil[i][j]; for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) if(oil[i][j] == '@') { ans++; dfs(i, j); } cout << ans << endl; } return 0; }