题目大意:求连在一起的油田有几块

解题思路:遍历表,将遍历过的油田设置为1,如果该地方没有油或者遍历过了,就return,反之,将它所在的地方的标记为1,表示已经已经探测过,然后再继续遍历下去

#include<cstdio>
#include<cstring>
int cur[200][200], vis[200][200];

void bfs(int x, int y) {
	if(cur[x][y] == 0 || vis[x][y])//
		return ;
	vis[x][y] = 1;
	bfs(x-1,y-1);	bfs(x-1,y);bfs(x-1,y+1);
	bfs(x,y-1);	bfs(x,y+1);
	bfs(x+1,y-1);	bfs(x+1,y);	bfs(x+1,y+1);
}

int main() {
	int m, n;
	char str[200];
	while(scanf("%d %d",&n, &m) != EOF) {
			if(n == 0 && m == 0)
				break;
			int j = 1, count = 0;
			memset(cur,0,sizeof(cur));
			memset(vis,0,sizeof(vis));
			for(int i = 0; i < n; i++) {
				scanf("%s", str);
//				printf("%s\n",str);
				int len = strlen(str);
				for(int k = 1; k <=len; k++) {
					if(str[k - 1] == '@')
						cur[j][k] = 1;
					else
						cur[j][k] = 0;
				}
			j++;		
			}
		for(int i = 1; i <= n; i++) 
			for(int k = 1; k <= m;k++) 
				if(cur[i][k] && !vis[i][k]){
					count++;
					bfs(i,k);	
				}
		printf("%d\n",count);
	}
	return 0;
}