题目链接
题目大意:
一块 m * n 的土地,搜连在一块的 @ 油田 , 八个方向
解题思路:
找到一个 @ 就 ans++, 然后将它变成 * ,再从它的八个方向开始搜
代码如下:
#include<iostream>
#include<cstring>
using namespace std;
char a[110][110];
int n,m;
int ans=0;
int d[8][2]={
{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{1,1},{1,-1},{-1,1}};
void dfs(int x,int y)
{
for(int i=0;i<8;i++)
{
int xx=x+d[i][0];
int yy=y+d[i][1];
if(xx>=0&&yy>=0&&xx<m&&yy<n&&a[xx][yy]=='@')
{
a[xx][yy]='*';
dfs(xx,yy);
}
}
}
int main()
{
int i,j;
while(cin>>m>>n)
{
if(m==0)
break;
ans=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]=='@')
{
ans++;
a[i][j]='*';
dfs(i,j);
}
}
}
cout<<ans<<endl;
}
return 0;
}