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

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

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

在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. Tomcat下载安装与环境变量的配置
  2. 【黑客浅析】像黑客一样思考
  3. 手机zip模拟器_车祸现场模拟器简体中文免安装版 6.4G
  4. 单臂路由配置命令_如何通过单臂路由实现VLAN间通信?(配置篇)
  5. (2)HTML基本标签
  6. Keras-5 基于 ImageDataGenerator 的 Data Augmentation实现
  7. typescript 判断异步执行已经结束_vue进阶系列——用typescript玩转vue和vuex
  8. POJ2559最大矩形面积——单调栈
  9. 【sklearn第十三讲】Naive Bayes分类器
  10. jsp开发教程之 仿MOP论坛 二(数据库,界面设计篇)
  11. DUBBO监控环境搭建
  12. cocos2d 解密ccbi_CocosBuilder 学习笔记(3) AnimationManager 与 ccbi 文件解析
  13. matlab魔方矩阵有哪些,关于matlab 魔方矩阵的1、用前100个自然数创建一个10阶的魔方矩阵,求出每行、每列、所有对角线元素的和,再将矩阵...
  14. 夫水之积也不厚,则其负大舟也无力
  15. openSUSE Leap 15.2 和 Tumbleweed KDE Plasma 在ThinkPad X61上安装,自带了有线、无线网卡和显卡驱动
  16. Abbreviation----Java实现
  17. win7系统64位系统怎么计算机配置,电脑装64位系统有什么要求|64位系统安装条件是什么...
  18. 10个 安卓应用商店开发者公司账号注册(2022最新最全)
  19. 链游玩家出品:链游市场现状
  20. Android App的国际化-各国语言缩写

热门文章

  1. MyBatis如何实现多表查询
  2. debian 取消合上笔记本盖子休眠
  3. matlab 渲染效果,如何用Matlab快速画出带有3D渲染效果的复杂曲面
  4. java模拟购物车窗体小程序,微信小程序实现购物车效果 示例源码
  5. 三星S9 S9+ 网络锁介绍
  6. win7待机CPU占用率高的解决办法(供参考)
  7. 微信小程序例子——获取微信群唯一标识openGId
  8. 阿里巴巴CTO张建锋:开源推动着互联网技术的发展
  9. BootStrap设置footer元素在底部
  10. sublime配置mysql_Sublime下载安装和配置