1 1 * 3 5 *@*@* **@** *@*@* 1 8 @@****@* 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 0 0
0 1 2 2
<pre name="code" class="cpp">#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<algorithm>
#include<cstdlib>
#include<set>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#define N 100010
#define Mod 10000007
#define lson l,mid,idx<<1
#define rson mid+1,r,idx<<1|1
#define lc idx<<1
#define rc idx<<1|1
const double EPS = 1e-11;
const double PI = acos(-1.0);
typedef long long ll;
const int INF=1000010;
using namespace std;
char mp[110][110];
int n,m;
int x[8]= {-1,0,1,0,-1,1,1,-1};
int y[8]= {0,1,0,-1,1,1,-1,-1};
void dfs(int i,int j)
{
if(mp[i][j]=='*')
return;
for(int ii=0; ii<8; ii++)
{
int xx=x[ii]+i;
int yy=y[ii]+j;
if(xx>=0&&xx<n&&yy>=0&&yy<m&&mp[xx][yy]=='@')
{
mp[xx][yy]='#';
dfs(xx,yy);
}
}
}
int main()
{
//freopen("test.in","r",stdin);
while(cin>>n>>m)
{
if(!n&&!m)
break;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
cin>>mp[i][j];
int ans=0;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
{
if(mp[i][j]=='@')
{
ans++;
dfs(i,j);
}
}
cout<<ans<<endl;
}
return 0;
}
原文地址:http://blog.csdn.net/acm_baihuzi/article/details/42341817