//AC了!scanf()输入行列式的一定要加getchar();!
//最后一个bug,在循环语句中写了return ,其实应该是continue,即如果这个方向不符合,就继续下一个方向!
//开心,总结下,如果开始了某个思路,就不要轻易换思路,条条大路通罗马,你得不出正确答案,不是因为思路不对,而是逻辑上有一些瑕疵。大方向是对的!
//也不要过总是用断电调试,比较浪费时间。
//返回值溢出
#include<cstdio>
#include<cstring>
char matrix[22][22];
int X[4]={0,0,1,-1};
int Y[4]={1,-1,0,0};
int count,w,h;
int flag[22][22];
void dfs(int x,int y){
for(int i=0;i<4;i++){
int newX=x+X[i];
int newY=y+Y[i];//新的位置
if(newX<0||newX>=h||newY<0||newY>=w)
continue;
if(matrix[newX][newY]=='#'||matrix[newX][newY]=='@'||flag[newX][newY]==1) continue;//两个Bug,注意这里,后面两个都是后来发现的!
else {
flag[newX][newY]=1;//一个bug,一开始没意识到重复计算了!
count++;
dfs(newX,newY);
}
}
}
int main(){
int sw,sh;
while(scanf("%d%d",&w,&h),w||h){
count=1;
getchar();//一定注意这一句!
for(int i=0;i<22;i++){
for(int j=0;j<22;j++){
flag[i][j]=0;
}
}
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
scanf("%c",&matrix[i][j]);
if(matrix[i][j]=='@'){
sw=i,sh=j;
}
}
getchar(); //一定注意这里的getchar()!
}
dfs(sw,sh);
printf("%d\n",count);
}
return 0;
}
HDOJ 1312 只走黑格
最新推荐文章于 2019-04-02 19:30:52 发布