HDOJ 1312 只走黑格

 //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;
} 

你可能感兴趣的:(算法,DFS)