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) } }
==================================
陇西行其二 陈陶
誓扫匈奴不顾身,五千貂锦丧胡尘。
可怜无定河边骨,犹是春闺梦里人。