算是学习笔记:B站 正月点灯笼 讲的DFS和BFS推荐大家去看一看,另外一部分是七月在线的在线课程
隐式图问题
• 状态(结点)不确定(明显)
• 关系(边)不确定(明显)
• 如何确定状态和关系(重点)
• 图搜索
• 深度优先遍历(DFS)
• 广度优先遍历(BFS)
• 隐式图搜索
• N皇后问题、骑士游历问题、八数码
遍历:定义
• 按某种顺序访问“图”中所有的节点
• 顺序
• 深度优先(优先往深处走)
• 广度优先(优先走最近的)
• 时间复杂度 O(n + m)
• 空间复杂度?
遍历
• 给出图G,要求求从入口v1访问到每一个点
• 两种遍历方式的数据结构
• 栈(递归,深度优先)
• 队列(广度优先)
• 广度优先找出的路径,经过节点数最少
深度优先DFS:伪代码
void DFS(int v)
visited[v] = true
for (v的每一个邻接点w)
if (!visited[w]) //如果没有被访问过
DFS(w)
举例,比如对于下图的路径的搜索:
# DFS 利用栈
graph = {
"A":["B", "C"],
"B": ["A", "C", "D"],
"C": ["A","B","D","E"],
"D": ["B","C",&#