DFS
注意:
- 使用传值dfs时,记得在最后接受递归层数之下所传来的值
例子:
bool dfs(int x,int y){
if(g[x][y]=='#') return false;
st[x][y]=1;
if(x==ox&&y==oy) return true;//递归深层值,并非直接传出去
for(int i=0;i<4;i++){
int a=x+dx[i];
int b=y+dy[i];
if(a<0||a>=n||b<0||b>=n) continue;
if(st[a][b]==1) continue;
if(g[a][b]=='#') continue;
if(dfs(a,b)==1) return true;//这一行代码接收递归深层传来的值
}
return false;//所有执行完,找不到正确值,则最后传回false
}
dfs计数模型: 搜索
dfs只要一条合乎要求的路径,则不需要push再pop,若要所有路径,则需要push再pop,再到达边界处即使保存