思想

把一些问题抽象成图,从一个点开始,向四周扩散,然后问你求最短路。当边权为1时,才能用BFS。BFS找到的路径一定是最短的,但代价就是空间复杂度可能比DFS大得多。

BFS的代码框架如下:

queue.push(初始状态)
while (队列不空)
{
	取队头t
    拓展队头t
}
阅读全文 »

思想

DFS算法,也称回溯算法,本质上就是一种暴力穷举算法。解决一个回溯问题,实际上就是一个决策树的遍历过程,站在决策树的一个节点上,只需要思考以下三个问题:

  1. 路径:已经做出的选择;
  2. 选择列表:当前可做出的选择;
  3. 结束条件:已经到达决策树底层,无法再做出选择。

DFS算法的代码框架如下:

result = []
def dfs(路径, 选择列表):
    if 满足结束条件:
        result.add(路径)
        return
    
    for 选择 in 选择列表:
        做出选择
        dfs(路径, 选择列表)
        撤销选择

其核心就是for循环里的递归,在递归调用前“做出选择”,在递归调用后“撤销选择”

阅读全文 »
0%