题意:
n*m的方阵有红格或是黑格,1 man只能走黑格
每次只能走上下左右四个紧邻方向的格子,求
这个man最后能走多少个黑格子。
分析:
dfs水题。从第一个黑格子开始递归的搜索,
每次搜索一个黑格子后为了以后不再重复走
这个黑格子,就把当前搜索的这个黑格子换
成红格子,然后继续dfs。。。
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 25;
char mp[maxn][maxn];
int w,h,ans;
int dx[4]={-1,0,0,1},dy[4]={0,1,-1,0};
void dfs(int x,int y)
{
int i,j,nx,ny;
mp[x][y]='#';
for(i=0;i<4;i++)
{
nx=x+dx[i]; ny=y+dy[i];
if(nx>=0&&nx<h&&ny>=0&&ny<w&&mp[nx][ny]=='.')
{
ans++;
dfs(nx,ny);
}
}
return;
}
int main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%d%d",&w,&h)&&(h||w))
{
int i,j;
for(i=0;i<h;i++)
{
getchar();
for(j=0;j<w;j++)
{
scanf("%c",&mp[i][j]);
}
}
for(i=0;i<h;i++)
for(j=0;j<w;j++)
if(mp[i][j]=='@')
{
ans=1;
dfs(i,j);
printf("%d\n",ans);
break;
}
}
return 0;
}