Project-1:设计并实现求无向图两点间所有路径的算法
2018-12-14 20:42
218 查看
设计并实现求无向图两点间所有路径的算法
-
实验原理
[li] 无向图的深度优先搜索:
假设一个图 G,图中所有顶点未曾被访问过,则深度优先搜索就是从图中某个顶点 v 出发,访问此顶点,然后再从 v 的未被访问的邻接点出发深度优先遍历图,直至图中所有和 v 有路径相通的顶点都被访问到;若图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。
利用深度优先搜索获取两点间路径的过程:
给定一个图 G,起始节点 a 和目的节点 b,开始时将 a 加入到路径集合 path[],并将 a 加入到已经访问节点集合 visited[],然后以 a 为起点运用深度优先算法对图进行搜索,每搜索到一个节点就将其加入到 path 和 visited 中,当搜索到目的节点 b 的时候就把路径打印出来,然后把 b 从 path 和 visited 中移除然后对前一个节点中未被访问的邻接节点进行深度优先搜索,当搜索到一个节点 v 已经没有未访问的邻接节点时,说明已经“到底”了,那么此时也要把 v 从 path 和 visited 中移除,然后对其前一个节点的未访问邻接节点进行深度优先搜索直到所有的节点都被搜索到为止;[/li]
实验步骤
-
将图的数据保存到 Graph.txt 中
代码实现
# 找路径 def find_path(graph, start_node, destination_node): node_num = graph.get_node_num() # 获取节点个数 visited = [] path = [] for i in range(node_num): # 对所有节点初始化,标记为0是没有访问 visited.append(0) dfs(graph, visited, start_node, destination_node, path) # 调用深度优先遍历 # 深度优先遍历 def dfs(graph, visited, v, destination_node, path): visited[v] = 1 # 标记为已经访问 path.append(v) # 将节点v加入到路径集合中 if v == destination_node: # 如果节点v是目的节点,那么打印路径 for i in range(len(path)): if i != len(path)-1: print(path[i], end="->") else: print(path[i]) print("") else: for w in graph.get_node_edge(v): # 如果v不是目的节点,就找到v没有被访问到邻接节点进行深度优先遍历 if visited[w] == 0: dfs(graph, visited, w, destination_node, path) path.pop(len(path) - 1) # 发现遍历到底(即v已经没有未访问的邻接节点或者v就已经是目的节点),把v从路径集合中删除 visited[v] = 0 # 并将v 设置为未访问
- 验证数据
0 6 0 9 1 2 1 7 1 8 3 1 3 2 3 10 4 5 4 8 1 3 2 1 2 5 2 3 5 4 9 10 9 8 10 3 11 6 11 9 5 2 6 0 6 11 8 4 8 1 8 9 7 26e25 1
- 验证结果
- 微信公众号(白话数据结构与算法)
下载源码
相关文章推荐
- 设计并实现求两点间所有路径的算法
- 图的邻接链表实现下的搜索两点之间所有路径的算法
- 图两点间的最短路径,所有路径算法C语言实现
- 图的邻接链表实现下的搜索两点之间所有路径的算法
- 图两点间的最短路径,所有路径算法C语言实现
- 基于java最短路径算法公交查询系统的设计与实现
- Dijkstra 最短路径算法的设计与PHP实现
- 任意两点间最短路径算法实现
- 求两点之间所有路径的算法
- 任意两点间最短路径算法实现
- Cocos2d-x《雷电大战》(6) 智能敌机AI来袭–飞行路径算法设计与实现(上)
- acm题目及我的程序(2)——Knight Moves (骑士跳跃) ——任意两点间的最短路径所有信息(算法1)
- acm题目及我的程序(2)——Knight Moves (骑士跳跃) ——任意两点间的最短路径所有信息(算法2)
- 无向连通图中两点间所有路径的算法
- Cocos2d-x《雷电大战》(6) 智能敌机AI来袭--飞行路径算法设计与实现(上)
- 设计一个算法,输出从u到v的所有最短路径(采用邻接表存储)
- C语言邻接表实现图的任意两点间所有路径
- Cocos2d-x《雷电大战》(6) 智能敌机AI来袭--飞行路径算法设计与实现(下)
- 图论算法-求(有向)图中任意两点间所有路径
- java搜索无向图中两点之间所有路径的算法