图由顶点和边组成。如果图中顶点是有序的,则称之为有向图。

由顶点组成的序列,称为路径。

除了可以对图进行遍历外,还可以搜索图中任意两个顶点之间的最短路径。

在python中,可利用字典 {键:值} 来创建图。

图中的每个顶点,都是字典中的键,该键对应的值为“该顶点所指向的图中其他的顶点”。

# -*- coding:utf-8 -*-
# file: pygraph.py
#
def searchGraph(graph, start, end):                 # 搜索树results = []                generatePath(graph, [start], end, results)            # 生成路径results.sort(key=lambda x:len(x))                    # 按路径长短排序return results
def 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 C to E')print('************************')for i in r:print(i)

运行结果如下:

Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
== RESTART: G:\pygraph.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 C 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']

Python数据结构——图(graph)相关推荐

  1. 数据结构--图(Graph)详解(四)

    数据结构–图(Graph)详解(四) 文章目录 数据结构--图(Graph)详解(四) 一.图中几个NB的算法 1.普里姆算法(Prim算法)求最小生成树 2.克鲁斯卡尔算法(Kruskal算法)求最 ...

  2. 数据结构--图(Graph)详解(三)

    数据结构–图(Graph)详解(三) 文章目录 数据结构--图(Graph)详解(三) 一.深度优先生成树和广度优先生成树 1.铺垫 2.非连通图的生成森林 3.深度优先生成森林 4.广度优先生成森林 ...

  3. 数据结构--图(Graph)详解(二)

    数据结构–图(Graph)详解(二) 文章目录 数据结构--图(Graph)详解(二) 一.图的存储结构 1.图的顺序存储法 2.图的邻接表存储法 3.图的十字链表存储法 4.图的邻接多重表存储法 二 ...

  4. 数据结构--图(Graph)详解(一)

    数据结构–图(Graph)详解(一) 文章目录 数据结构--图(Graph)详解(一) 一.图的基本概念 1.图的分类 2.弧头和弧尾 3.入度和出度 4.(V1,V2) 和 < V1,V2 & ...

  5. Python 数据结构 —— 图

    1. 图的存储方式 1.1 图的存储数据结构 图可以用 邻接矩阵 和 邻接表 (Adjacency List)来表示,当边数不多的时候,使用邻接表存储效率更高 如存储下面的图: 对应的邻接表为: 1. ...

  6. python数据结构-图

    图 图是一种数据间具有多对多关系的非线性数据结构 顶点的度:指与该顶点关联的边的数目 全部顶点的度之和为边数的两倍 图的存储有邻接矩阵,邻接表,十字链表 邻接矩阵 边采用顺序存储结构,用二维数组存储 ...

  7. 数据结构--图 Graph

    文章目录 1. 概念 2. 存储方法 2.1 邻接矩阵 Adjacency Matrix 2.2 邻接表 Adjacency List 3. 图的遍历 3.1 广度优先搜索BFS(Breadth Fi ...

  8. 数据结构与算法(python):图(Graph)的基本概念及应用

    参考自 MOOC数据结构与算法Python版 本章代码: https://github.com/HuiFang-hub/-/tree/main. 目录 一.图Graph的概念 1.1 互联网 1.2 ...

  9. python加载模型文件进行图片分类_tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式...

    Google提供了一个工具,TensorBoard,它能以图表的方式分析你在训练过程中汇总的各种数据,其中包括Graph结构. 所以我们可以简单的写几行Pyhton,加载Graph,只在logdir里 ...

最新文章

  1. 在 CentOS7 安装 ELK【转】
  2. 皮一皮:如何将紫薯变成绿薯?
  3. ibatis增删改、批量增删改以及查询
  4. mysql left day 7_day7-mysql函数
  5. python动态图片转字符画_GIF动态图,视频?都能用Python转换成字符画图像
  6. Boson NetSim实验模拟器破解
  7. 分布式系统的数据分布方式
  8. gulp + webpack 构建多页面前端项目 1
  9. SAP UI5 应用开发教程之六十 - SAP UI5 地图控件的一些高级用法试读版
  10. 全排列函数、组合函数
  11. Zabbix3.0安装文档
  12. Activity生命周期(1)
  13. linux16.04设置网络,ubuntu16.04之后网络IP配置
  14. vue 两个table 并排_从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(六)
  15. 外挂(目前看不懂_转帖不要怪我抄袭只是想学习而已)
  16. h5+js实现本地文件读取和写入-web前端教程
  17. 手把手一步步用DataGridView 控件编写属于自己的日历
  18. c语言 步进电机 程序,两相5、6线步进电机C语言程序
  19. 将多个excel文件合并为:一个excel文件的多个sheet页【方法技巧】
  20. VS2017的C++开发心得(五)项目开发的文件夹管理

热门文章

  1. 准时下班,也是一种能力
  2. python 爬虫day02
  3. sql语句相关面试题
  4. java+ssh+mysql新闻网站
  5. C++ 中ASCII码转16进制数
  6. 【python安装xlrd模块】
  7. 【C#】C#中的ref、out关键字的应用与区别
  8. html语言怎么设置设置表格行高,html语言怎么设置设置表格行高?
  9. Linux -dbus总线
  10. 【并发】详解redis的incr、decr命令