思路1:DFS
用二维数组存储走路信息(初试为0)
用变量step记录走了几个格子(起点算1,与0区分开)
DFS函数分4部分:
1.返回
2.修改
3.递归
4.复原
由于本题需要复原,需要注意两点:
1.如果递归访问下一个格子,已经塌了,则不需要复原。
2.注意step–的操作,step++的操作以及step==?的返回操作的相对位置。
DFS代码
void dfs(int i,int j)
{
if(block[i][j])
return;
block[i][j]=step++;//出生点为1号格子
if(step==n+2)//这个要在step++后面,否则会多减
{
ans++;
return;
}
dfs(i,j-1);//向左走;
//如果没走成,就不需要修改上一次尝试的内容,所以复原时要加上下面的判断
if(block[i][j-1]>block[i][j])
{
block[i][j-1]=0;
step--;
}
dfs(i+1,j)