UVA 572 (dfs)
题意:找出一块地有多少油田。‘@’表示油田。找到一块就全部标记。
#include<cstdio> #define maxn 110 char s[maxn][maxn]; int n,m; int ans; int dir[8][2] = {{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}}; void dfs(int x,int y) { s[x][y] = '*'; for(int i = 0;i < 8; i++){ int xx = x + dir[i][0]; int yy = y + dir[i][1]; if(xx >= 0 && xx < m && yy >= 0 && yy < n && s[xx][yy] == '@'){ dfs(xx,yy); } } } int main() { //freopen("in.txt","r",stdin); while(scanf("%d%d",&m,&n) != EOF){ ans = 0; if(m == 0 && n == 0) break; for(int i = 0;i < m; i++) scanf("%s",s[i]); for(int i = 0;i < m; i++){ for(int j = 0;j < n; j++){ if(s[i][j] == '@'){ dfs(i,j); ans++; } } } printf("%d\n",ans); } return 0; }