搜索树
搜索通过遍历搜索树查询每一种状态空间来找到最优解
问题的解可能是搜索树的叶子节点(普通树)
也可能是从根节点到叶子节点的集合(二叉树)
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
}
}
}