链接:点击打开链接
这道题是从@出发,最多可以走多少个点,dfs,从@点开始向上下左右四个方向搜索;
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char a[22][22];
int w,h,x1,y1,c[4][2]={{0,-1},{-1,0},{1,0},{0,1}},sum;
void dfs(int x,int y){
int i,x2,y2;
sum++;
a[x][y]='#';
for(i=0;i<4;i++){
x2=x+c[i][0],y2=y+c[i][1];
if(a[x2][y2]=='.'&&x2>=1&&x2<=h&&y2>=1&&y2<=w)
dfs(x2,y2);
}
}
int main(){
int i,j;
while(~scanf("%d %d",&w,&h)){
if(w==0&&h==0)
break;
for(i=1;i<=h;i++){
getchar();
for(j=1;j<=w;j++){
scanf("%c",&a[i][j]);
if(a[i][j]=='@'){
x1=i,y1=j;
}
}
}
// printf("%d %d",x1,y1);
sum=0;
dfs(x1,y1);
printf("%d\n",sum);
}
return 0;
}