图是非线性的数据结构,图是由顶点和边组成的。如果图中的顶点是有序的,那么图是有方向的,称之为有向图,如图-1所示;否则,图是无方向的,称之为无向图。在途中,由顶点组成的序列称之为路径。

图和树相比,少了树那样明显的层次结构。

在 Python 中,可以采用字典的方式来创建图,图中的每个元素都是字典中的键,该元素所指向的图中其他元素组成键的值。

与树一样,对于图来说,也可以对其进行遍历。除了遍历以外,还可以在途中搜索所有的从一个顶点到另一个顶点的路径。

图中的每一个顶点可以看做一个城市,路径可以看做城市到城市之间的公路。因此,通过搜索所有的路径,可以找到一个顶点到另一个顶点的最短路径,即城市到城市间的最短路线。

下面所示的 py_graph.py 是使用字典的方式构建如图-1所示的有向图,并搜索图中的路径。

# -*- coding:UTF-8 -*-
# file: py_graph.pydef searchGraph(graph, start, end):  # 搜索树results = []generatePath(graph, [start], end, results)  # 生成路径results.sort(key=lambda x:len(x))  # 按路径长短排序return resultsdef generatePath(graph, path, end, results):  # 生成路径state = path[-1]if state == end:results.append(path)else:for arc in graph[state]:if arc not in path:generatePath(graph, path + [arc], end, results)if __name__ == '__main__':Graph = {'A': ['B', 'C', 'D'],  # 构建树'B': ['E'],'C': ['D', 'F'],'D': ['B', 'E', 'G'],'E': [],'F': ['D', 'G'],'G': ['E']}r = searchGraph(Graph, 'A', 'D')  # 搜索 A 到 D 的所有路径print('**************************')print('       path A to D        ')print('**************************')for i in r:print(i)r = searchGraph(Graph, 'A', 'E')  # 搜索 A 到 E 的所有路径print('**************************')print('       path A to E        ')print('**************************')for i in r:print(i)r = searchGraph(Graph, 'C', 'E')  # 搜索 C 到 E 的所有路径print('**************************')print('       path A to E        ')print('**************************')for i in r:print(i)

执行 py_graph.py 脚本输出结果:

C:\Users\图图\AppData\Local\Programs\Python\Python37-32\python.exe D:/Python/py_graph.py
**************************path A to D
**************************
['A', 'D']
['A', 'C', 'D']
['A', 'C', 'F', 'D']
**************************path A to E
**************************
['A', 'B', 'E']
['A', 'D', 'E']
['A', 'C', 'D', 'E']
['A', 'D', 'B', 'E']
['A', 'D', 'G', 'E']
['A', 'C', 'D', 'B', 'E']
['A', 'C', 'D', 'G', 'E']
['A', 'C', 'F', 'D', 'E']
['A', 'C', 'F', 'G', 'E']
['A', 'C', 'F', 'D', 'B', 'E']
['A', 'C', 'F', 'D', 'G', 'E']
**************************path A to E
**************************
['C', 'D', 'E']
['C', 'D', 'B', 'E']
['C', 'D', 'G', 'E']
['C', 'F', 'D', 'E']
['C', 'F', 'G', 'E']
['C', 'F', 'D', 'B', 'E']
['C', 'F', 'D', 'G', 'E']Process finished with exit code 0

Python__数据结构与算法——图相关推荐

  1. 深度搜索和广度搜索领接表实现_数据结构与算法--图的搜索(深度优先和广度优先)...

    数据结构与算法--图的搜索(深度优先和广度优先) 有时候我们需要系统地检查每一个顶点或者每一条边来获取图的各种性质,为此需要从图的某个顶点出发,访遍图中其余顶点,且使得每一个顶点只被访问一次,这个过程 ...

  2. Python__数据结构与算法——表、栈、队列

    目录 一.表 二.栈(后进先出) 三.队列(先进先出) 数据结构使用来描述一种或多种数据元素之间的特定关系,算法是程序设计中对数据操作的描述,数据结构和算法组成了程序.对于简单的任务,只要使用编程语言 ...

  3. Python__数据结构与算法——树、二叉树(实现先、中、后序遍历)

    目录 一.树 二.二叉树 树和前面所讲的表.堆栈和队列等这些线性数据结构不同,树不是线性的.在处理较多数据时,使用线性结构较慢,而使用树结构则可以提高处理速度.不过,相对于线性的表.堆栈和队列等线性数 ...

  4. 数据结构与算法--图的表示与常用算法

    什么是图? 图(Graph)形结构中,是一种非线性结构,在图中每一个元素都可以有0或多个前驱,也可以有多个后驱.节点之间的关系是任意的,即图中任意两个数据元素之间都有可能相关. 图的术语 顶点:带有数 ...

  5. Python 数据结构与算法——图(Graph)

    图结构(Graph)--算法学中最强大的框架之一.树结构只是图的一种特殊情况. 如果我们可将自己的工作诠释成一个图问题的话,那么该问题至少已经接近解决方案了.而我们我们的问题实例可以用**树结构(tr ...

  6. js数据结构与算法 图的BFS和DFS

    本文为技术学习的笔记-<Learning JavaScript Data Structures and Algorithms, Third Edition> 1.图的相关术语 图是网络结构 ...

  7. Python__数据结构与算法——查找与排序

    查找和排序是最基本的算法,在很多脚本中都会用到查找和排序.尽管 Python 提供的用于查找和排序的函数能够满足绝大多数需求,但还是有必要了解最基本的查找和排序算法,以便在有特殊需求的情况下,可以自己 ...

  8. 计算机基础知识数据结构与算法,(计算机基础知识)[数据结构与算法] 图

    第六章 图 6.1 图的定义和基本术语 图: G=(V,E) Graph = (Vertex, Edge) V: 顶点(数据元素)的有穷非空集合 E: 边的有穷集合 完全图: 任意两个点都有一条边相连 ...

  9. c++ 遍历所有点且距离最短_编程小白暑期进阶笔记41-C语言数据结构与算法图遍历的应用...

    基于广度优先遍历算法的应用 思考题: (思考题答案: BFS(广度优先遍历)在一般的带权图中是不能解决最短路问题,了解BFS的都知道,BFS是根据节点到源节点之间的节点数遍历的,也就是先访问离源节点节 ...

最新文章

  1. java 反射 速度_Java反射获取实例的速度对比分析
  2. NDK历史版本下载方法
  3. 如何使用ODBC搭配dsn链接数据库
  4. ctb伺服驱动器说明书_青岛FANUC伺服电机364、453故障维修
  5. 经典的Java面试题及回答集锦
  6. Java获取文件大小,文件夹内文件个数的工具类
  7. java什么时候可能产生内存溢出_哪些场景会产生OOM?怎么解决?
  8. JEECG 缓存用法
  9. java使用smtp发送邮件问题
  10. QT + MinGW 中文显示乱码解决方案
  11. 拓扑量子计算机 超导 光,科学家发现新型拓扑超导材料 有望推动实现拓扑量子计算...
  12. paip. VS2010版本控制tfs使用总结
  13. 计算机网络基础(一)
  14. 计算机辅助园林设计考试题,计算机辅助园林规划设计之软件比较
  15. jquery通过前缀removeClass
  16. 商标注册用免费商用字体整体
  17. 高质量前端快照方案:来自页面的「自拍」
  18. BSV 上的 zk-SNARKs
  19. dac 矩形波函数c语言,使用DAC接口生成矩形波
  20. 2013年4月TIOBE编程语言排行榜:Objective-C排名首次下滑

热门文章

  1. 【PM模块】预防性维护(上)
  2. 一样是做鸭,绝味与周黑鸭的利润为何相差那么大?
  3. 项目由于装运点不同交货拆分解决方案
  4. 传统企业如何实现移动化转型?
  5. ERP选型 SAP PK Oracle
  6. 服饰新消费的2021:传统快时尚败退,内衣、汉服等细分赛道狂欢
  7. 一季度跨越式增长,高灯科技跑出“第二曲线”
  8. 猿辅导、作业帮忙“圈钱”,跟谁学、有道、51Talk狂“烧钱”,在线教育钱途在哪?
  9. 超百家金融机构争相出席,只因飞贷宣布输出全球领先的移动信贷整体技术
  10. 将矩阵转为一行_LeetCode1253:矩阵重构