摘要:1. 简介 2. 公园迷宫漫步 3. 无线迷宫与最短(不加权)路径问题 4. 强连通分量
1. 简介
在计算机科学裡,树的遍历(也称为树的搜索)是圖的遍歷的一种,指的是按照某种规则,不重复地访问某种樹的所有节点的过程。具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一样的。两种著名的基本遍历策略:深度优先搜索(DFS) 和 广度优先搜索(BFS)。参考:https://zh.wikipedia.org/wiki/%E6%A0%91%E7%9A%84%E9%81%8D%E5%8E%86
遍历不单单指对显式图结构的遍历,比如 序列化某个复杂的数据结构;列出文件系统的所有文件和部分文件;管理软件包之间的依赖关系 等待都会用到遍历。同时,遍历还是许多其他算法的关键组成部分和基本原理。
连通分量就是指目标图中最大且独立的连通子图。通过遍历获得图结构的连通分量。
2. 公园迷宫漫步
#递归版的深度优先搜索 def rec_dfs(G, s, S=None): if S is None: S = set() S.add(s) for u in G[s]: if u in S :continue rec_dfs(G, u, S)
#迭代版深度优先搜索 def iter_dfs(G, s): S, Q = set(), [] Q.append(s) while Q: u = Q.pop() if u in s : continue S.add(u) Q.extend(G[u]) yield u
#通用性的图遍历函数 def traverse(G, s, qtype=set): S, Q = set(), qtype() Q.add(s) while Q: u = Q.pop() if u in S : continue S.add(u) for v in G[u]: Q.add(v) yield u
以及,深度优先的时间戳与拓扑排序
3.无线迷宫与最短(不加权)路径问题