求一个连通块的元素个数(包含@的连通块)
#include <iostream>
#include"sstream"
#include"string"
#include"algorithm"
#include"cstring"
#include"cstdio"
using namespace std;
int dir[4][2]={1,0,-1,0,0,1,0,-1};
char g[30][30];
int r,c;
int cnd;
int visit[30][30];
void dfs(int si,int sj)
{
for(int i=0;i<4;i++)
{
int ki=si+dir[i][0];
int kj=sj+dir[i][1];
if((ki<r&&ki>=0&&kj<c&&kj>=0)&&(g[ki][kj]=='.'||g[ki][kj]=='@')&&!visit[ki][kj])
{
++cnd;
visit[ki][kj]=1;
dfs(ki,kj);
}
}
}
int main()
{
// freopen("a.txt","r",stdin);
while(cin>>c>>r&&(r+c))
{
memset(visit,0,sizeof(visit));
int si,sj;
int i,j;
cnd=0;
for(i=0;i<r;i++)
for(j=0;j<c;j++)
{
cin>>g[i][j];
if(g[i][j]=='@')
{sj=j;si=i;}
}
++cnd;
visit[si][sj]=1;
dfs(si,sj);
cout<<cnd<<endl;
}
return 0;
}