简单DFS,以前入门做的题目...题意:一块油田如果与他相邻的八个方向的油田联通就算一个,问有多少块油田..找到第一个油田之后,进行dfs将相邻的全部变成‘*’即可...因为以后不会再用了,没必要在开used数组了..
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
char map[125][125];
int n,m;
int d[8][2]={1,0,-1,0,0,1,0,-1,1,1,1,-1,-1,1,-1,-1};//八个方向
int ok(int x,int y)
{
if(x<0||y<0||x>=m||y>=n)
return 0;
if(map[x][y]=='*')
return 0;
return 1;
}
void dfs(int x,int y)
{
for(int i=0;i<8;i++)
{
int dx=x+d[i][0];
int dy=y+d[i][1];
if(ok(dx,dy))
{
map[dx][dy]='*';
dfs(dx,dy);
}
}
}
int main()
{
while(scanf("%d %d",&m,&n),m!=0)
{
for(int i=0;i<m;i++)
scanf("%s",map[i]);
int ans=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(map[i][j]=='@')
{
ans++;
dfs(i,j);
}
}
}
cout<<ans<<endl;
}
return 0;
}