题目大意:
给出一张图,以’@’为起点,’#’为墙,’.’为普通格子,求出最大能够到达的格子数
大致思路:
简单的dfs,练手用刚刚好~
c++:
#include<cstdio>
char map[25][25];
int count,n,m;
int dx[4]={0,1,0,-1}; //这里用了书上的方法,一个循环即可遍历四个方向
int dy[4]={1,0,-1,0};
void dfs(int x,int y){
count++; //只要dfs了一次就要计数
map[x][y]='#'; //每次dfs先将(x,y)上的格子改为'#'
for(int i=0;i<4;i++){
int x0=x+dx[i];
int y0=y+dy[i];
if(x0>=0&&y0>=0&&x0<m&&y0<n&&map[x0][y0]!='#')
dfs(x0,y0); //只要在图内且不是墙就dfs
}
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
if(m==0&&n==0)
break;
getchar();
count=0; //count要初始化
int x,y;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
map[i][j]=getchar();
if(map[i][j]=='@')
x=i,y=j; //记录起始坐标
}
getchar();
}
dfs(x,y); //从起始坐标进行dfs
printf("%d\n",count);
}
return 0;
}