BFS 和 DFS
BFS:
优点:1,不会爆栈
2, 可以查询最小方案数 和 最短路径
缺点:空间是指数级别的
队列模板:
q.push(head)
while(!q.empty())
{
vertex=q.front();
q.pop();
if(vertex 为目标状态)
输出
for( next=vertex+* ) // 循环所有子节点
{
if( next 合法)
q.push(next)
}
}
DFS:
优点:1,空间和深度成正比,为 n
2,可以利用递归来记录路径
缺点: 1,会爆栈 当树的深度达到10万层,4M 左右就爆了
递归模板
void dfs(状态A)
{
if(A不合法) // 回溯
return
if(A为目标状态)
输出
if(A 不为目标状态) // 递归调用,求下一个
dfs(A+*)
}
栈模板
s.push(head)
while(!q.empty())
{
vertex=s.top();
s.pop();
if(vertex 为目标状态)
输出
for( next=vertex+* ) // 循环所有子节点
{
if( next 合法)
s.push(next)
}
}
==================================
陇西行其二 陈陶
誓扫匈奴不顾身,五千貂锦丧胡尘。
可怜无定河边骨,犹是春闺梦里人。

浙公网安备 33010602011771号