今天又重复编写了一下九度OJ1461:http://blog.youkuaiyun.com/grooowing/article/details/39827139
出错了,我认为我的代码思路是没问题的,于是就开始DEBUG。痛苦的debug3小时,哎,菜鸟就得这么辛苦。贴出我的DFS代码
bool DFS(int x,int y){//保证处理的都是'.'
maze[x][y]='X';
t++;
//printf("///x,y,t:%d,%d,%d\n",x,y,t);
//printf("t:%d\n",t);
for(int i=0;i<4;i++){
int a=x+go[i][0];
int b=y+go[i][1];
if(a<0||b<0||a>=N||b>=M)continue;
if(maze[a][b]=='X')continue;
//printf("x,y,a,b,t:%d,%d,%d,%d,%d\n",x,y,a,b,t);//
if(maze[a][b]=='D'){
//printf("t:%d\n",t);///
if(t==T)return true;
else return false;
}
if(maze[a][b]=='.'){
//printf("a,b,%d,%d",a,b);
if(DFS(a,b))return true;
//return false;
}
}
t--;
maze[x][y]='.';
return false;
}
三小时之后找到了错误(上面是错误代码)
错误在于判断maze[a][b]=='D'这里,里面else return false;绝对是没有考虑清楚。这一行应该改成else continue;
因为这个a,b不行还要继续看下一个a,b呢。return false之后你让别的a,b怎么活。。
这里给出两点反思。
1,编写代码是,要考虑清楚每一步究竟做了什么事,是不是按着自己的意图来的;
2,debug是,首先反思自己思路是否正确,然后在逐一排错。尤其要注意return 这个词,这个词会结束后续所有工作,是否会影响?而且,return前是否需要重置某些变量?比如最后一个return前t--等操作。
这题还要注意类型是否正确,char maze[][],而不是int....