题目描述:输入数据有多组,输入两个整数,表示数组的行和列,下面输入一个二维的字符串数组,仅包含‘@’和‘*’两种字符,相邻的‘@’表示同一个油田,求总共几个油田。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 110
using namespace std;
char mapp[N][N];
int m,n;
int fx[10]={0,0,1,-1,1,1,-1,-1};
int fy[10]={1,-1,0,0,1,-1,1,-1};
void dfs(int ax,int ay)
{
mapp[ax][ay]='*';
for(int i=0;i<8;i++)
{
int x=ax+fx[i];
int y=ay+fy[i];
if(x>=0&&x<m&&y>=0&&y<n&&mapp[x][y]=='@')
{
dfs(x,y);
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)&&(m+n!=0))
{
getchar();
for(int i=0;i<m;i++)
{
gets(mapp[i]);
}
int cnt=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(mapp[i][j]=='@') {
cnt++;
dfs(i,j);
}
}
}
cout<<cnt<<endl;
}
return 0;
}