搜索水题。bfs。
求有多少块油田,在周围算在一起,八个方向宽搜即可。
#include<cstdio>
#include<cstring>
const int MAXN=105;
int vis[MAXN][MAXN];
char maze[MAXN][MAXN];
int dx[]={1,1,1,0,0,-1,-1,-1};
int dy[]={-1,0,1,-1,1,-1,0,1};
void dfs(int x,int y){
if(maze[x][y]=='*'|| maze[x][y]==0 || vis[x][y]) return ;
vis[x][y]=1;
for(int i=0;i<8;i++) dfs(x+dx[i],y+dy[i]);
}
int main(){
//freopen("in.txt","r",stdin);
int m,n;
while(~scanf("%d%d",&m,&n)){
if(m==0 && n==0) break;
memset(maze,0,sizeof(maze));
memset(vis,0,sizeof(vis));
for(int i=1;i<=m;i++) scanf("%s",maze[i]+1);
int count=0;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
if(maze[i][j]=='@' && !vis[i][j]){
count++;
dfs(i,j);
}
printf("%d\n",count);
}
return 0;
}