搜索树 搜索通过遍历搜索树查询每一种状态空间来找到最优解 问题的解可能是搜索树的叶子节点(普通树) 也可能是从根节点到叶子节点的集合(二叉树) st[i]与节点 搜索时可用st[i]数组表明是否走过i点 节点可以携带多种信息 dfs中dfs(int x , int y, int sum) bfs 中 queue<PII> DFS void DFS( 当前状态 ) { if(当前状态为边界状态或剪枝) { 记录或输出 return; } 遍历解答树所有子节点 (一般情况下普通树为for循环,二叉树为两个dfs) for(int i=0;i<n;i++) { if(子状态满足约束条件) { st[子状态]=处理; dfs(子状态) (子状态需保存时可加return) st[子状态]=取消处理; } } ------------------------------------- st[子状态1]= 处理; dfs(子状态); st[子状态1]= 取消处理; st[子状态2]= 处理; dfs(子状态); st[子状态2]= 取消处理; } BFS 入队 操作1; while(q.size()) { 出队 (扩展t所有邻点x) { if(走过/剪枝) continue; if(x未被走过) { 入队 操作2 } } }