题意: @代表油田 可以从8个方向连接 问一个图里有多少个油田
#include<bits/stdc++.h>
using namespace std;
int dx[8]={0,0,1,1,-1,-1,1,-1};
int dy[8]={1,-1,0,-1,0,1,1,-1};
char mp[105][105];
int vis[105][105];
int n,m,ans,cnt,sum;
void dfs(int x,int y)
{
//if(sum==cnt) return ans;
for(int i=0;i<8;i++)
{
int nextx=x+dx[i];
int nexty=y+dy[i];
if(nextx>=1 && nextx<=n && nexty>=1 &&nexty<=m)
{
//if(mp[x][y]=='*' && mp[nextx][nexty]=='@' && !vis[nextx][nexty]) ans++;
if(mp[nextx][nexty]=='@' && !vis[nextx][nexty])
{
vis[nextx][nexty]=1;
sum++;
dfs(nextx,nexty);
}
//cout<<ans<<endl;
}
}
}
int main()
{
while(cin>>n>>m)
{
if(m==0) break;
cnt=0,sum=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>mp[i][j];
//if(mp[i][i]=='@') cnt++;
}
}
ans=0;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(mp[i][j]=='@' && !vis[i][j])
{
dfs(i,j);
ans++;
}
}
}
cout<<ans<<endl;
}
return 0;
}