- 递归的本质是穷举。
- 数据结构中的向右将当前位置置数,之后再次调用自身向右并重置当前位置,实际上是在进行重复性试探。在栈底的视角来看,这将耗尽向右的可能性,向下也是同理。在迷宫问题中递归的原理与穷举极为相似,唯一不同的是所采用的方式近似于微元法,对开发者非常友好。
Main{
map=int[8][7];
map={
[1,1,1,1,1,1,1],
[1,0,0,0,0,0,1],
[1,0,0,0,0,0,1],
[1,1,1,0,0,0,1],
[1,0,0,0,0,0,1],
[1,0,0,0,0,0,1],
[1,0,0,0,0,0,1],
[1,1,1,1,1,1,1]
}
check(i,j){
if(i==7&&j==6){
print();
return;
}
if(canmove(i,j+1))向右,map[i][j]=5,canmove(i,j+1) ,map[i][j]=0,return true;
if(canmove(i,j-1))return true;类似向右;
if(canmove(i+1,j))return true;同上;
if(canmove(i-1,j))return true;同上;
}
canmove(K,L){
if(K==0||L==0||K==8||L==7)碰壁,return false;
elseif(map[K][L]==1)碰壁,return false;
elseif(map[K][L]==5),重复,return false;
else return true;
}
main(){
}
}