1113红与黑,dfs算法
#include<iostream>
using namespace std;
const int N=30;
int n,m;
char s[N][N];
int x,y;
int dy[]={1,0,-1,0},dx[]={0,1,0,-1};
int cnt;
int dfs(int x,int y)
{
s[x][y]='#';
cnt++;
for(int i=0;i<4;i++)
{
int a=x+dx[i];
int b=y+dy[i];
if(a<0||a>=n||b<0||b>=m||s[a][b]=='#')continue;
dfs(a,b);
}
return cnt;
}
int main()
{
while(cin>>m>>n,m||n)
{
cnt=0;
for(int i=0;i<n;i++)cin>>s[i];
int f=0;
for(int i = 0;i < n;i ++)
{
for(int j=0;j<m;j++)
{
if(s[i][j]=='@')
{
x=i;
y=j;
f=1;
}
}
if(f==1)break;
}
cnt=dfs(x,y);
cout<<cnt<<endl;
}
return 0;
}