递归的深度
约 10 分钟
深搜靠递归实现,每深入一层就在系统栈上压一帧。地图很大、路径很长时,递归可能深到几十万层,而默认栈空间通常只有 1 MB 左右,压爆了程序直接崩溃——这就是爆栈(在评测机上常表现为 RE 运行错误)。
举个危险的例子:一张 全是空地的图,DFS 一路走下去,递归深度能到 ,很容易爆栈:
void dfs(int x, int y) {
vis[x][y] = true;
// 递归深度最坏可达 n*m
...
}
应对办法:地图大、只求连通或最短时,改用广搜——它用堆上的队列,不吃系统栈,深度再大也稳。深搜适合状态不深、要枚举所有方案的场合。
小纸条
什么情况下深搜容易出问题?
登录 后可看答案