DFS模板
void dfs()
{
// 写终止条件,即递归到什么时候停止,比如二叉树中子树为空,矩阵路径
// 中超出地图边界等等,当然根据问题不同这个地方也会有些变化
if ()
return;
// 递归与当前节点相连的要搜索的点。比如说矩阵路径中的上下左右四个点
// 又或者父节点的左右子节点
//一般是循环的形式
for()
{
if() //符合条件
{
// 为了防止反复遍历遍历过的节点,把遍历过的点标记
visited=true;
//往下递归
dfs();
//回溯
visited=false;
}
}
return;
}
本题不同于一般的DFS递归
这里的数组范围是变化的(每往下递归一层就少一个数)
所以用vector存储数据
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long LL