这道题是一个比较水的搜索题,思路就是先找到一块油田,然后找这块油田周围的油田,这样组成了一大块油田,看一共有多少大块油田,输出。
附代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn = 110;
int vis[maxn][maxn],m,n;
int mv[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,1},{1,-1},{-1,-1}};
char s[maxn][maxn];
void dfs(int x,int y)
{
for(int i = 0;i < 8; i++)
{
int next_x = x + mv[i][0];
int next_y = y + mv[i][1];
if(next_x >= 0 && next_x < m && next_y >= 0 && next_y < n && vis[next_x][next_y] == 0)
{
if(s[next_x][next_y] == '@')
{
vis[next_x][next_y] = 1;
dfs(next_x,next_y);
}
}
}
}
int main()
{
while(1)
{
scanf("%d %d",&m,&n);
getchar();
if(m == 0 && n == 0) break;
int sum = 0;
memset(vis,0,sizeof(vis));
for(int i = 0;i < m; i++)
{
scanf("%s",s[i]);
getchar();
}
for(int i = 0;i < m; i++)
{
for(int j = 0;j < n; j++)
{
if(s[i][j] == '@' && !vis[i][j])
{
dfs(i,j);
sum++;
}
}
}
printf("%d\n",sum);
}
return 0;
}