BFS和DFS
一、BFS:广度优先搜索
从某点开始,走该点所有的方向,然后再从这些路径中找可以走的路,直到最先找到符合条件的点,这个运用需要用到队列(FIFO队列)。这个过程叫做对图或树的遍历
*-算法模板
level = 0 # 代表当前遍历到的层数
while deque不空: # deque中的是当前所有父结点
fnode = deque.leftpop()
for cnode in fnode的所有子结点:
if cnode有效且未被访问过:
level += 1
根据当前子结点,执行操作
deque.append(cnode)
二、DFS:深度优先搜索
沿着某一路径,一直向下搜索,直到叶子结点。然后返回到上一层父结点,继续向下深度优先遍历(不撞南墙不回头)。DFS的思想是回溯,也就是递归
*-算法模板
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)

浙公网安备 33010602011771号