BFS和DFS

 

一、BFS:广度优先搜索

从某点开始,走该点所有的方向,然后再从这些路径中找可以走的路,直到最先找到符合条件的点,这个运用需要用到队列(FIFO队列)。这个过程叫做对图或树的遍历

 
Breadth First Search
 
*-算法模板
level = 0  # 代表当前遍历到的层数
while deque不空:  # deque中的是当前所有父结点
    fnode = deque.leftpop()
    for cnode in fnode的所有子结点:
        if cnode有效且未被访问过:
            level += 1
            根据当前子结点,执行操作
            deque.append(cnode)
 
 
二、DFS:深度优先搜索
沿着某一路径,一直向下搜索,直到叶子结点。然后返回到上一层父结点,继续向下深度优先遍历(不撞南墙不回头)。DFS的思想是回溯,也就是递归
Depth First Search 3 4 0 5 2 6
 
*-算法模板
def DFS(lises, x, y):
        if  x,y是否合法 and lises[x][y] == '未访问':
                lises[x][y] = '已访问'
                某些操作
                for cx, cy in lises[x][y]的子节点:
                        DFS(lises, cx, cy)
        return  # 遍历到底返回,执行下一次遍历
for li, l in enumerate(grid):
        for ei, e in l:
                if e符合某些条件:
                        DFS(grid, li, ei)
 
 
posted @ 2020-05-24 17:16  xiaoqichaoren  阅读(149)  评论(0)    收藏  举报