题目链接:http://poj.org/problem?id=1979
源代码:
#include<iostream>
using namespace std;
char a[1005][1005];
int X[5]={-1,0,1,0};
int Y[5]={0,-1,0,1};
int m,n;
int check(int x,int y)
{
if(x<0||y<0||x>=m||y>=n)
return 0;
return 1;
}
int dfs(int x,int y,int count)
{
count++;
a[x][y]='#';
int xx,yy;
for(int i=0;i<4;i++)
{
xx=x+X[i];
yy=y+Y[i];
if(!check(xx,yy)) continue;
if(a[xx][yy]=='.')
count=dfs(xx,yy,count);
}
//cout<<" "<<count<<endl;
return count;
}
int main()
{
int i,j,k;
int count;
while(cin>>n>>m&&m!=0&&n!=0)
{
count=0;
for(i=0;i<m;i++)
cin>>a[i];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(a[i][j]=='@')
{
count=dfs(i,j,count);
}
cout<<count<<endl;
}
}