题目大意:求连在一起的油田有几块
解题思路:遍历表,将遍历过的油田设置为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;
}