python数据结构之图的实现方法


Posted in Python onJuly 08, 2015

本文实例讲述了python数据结构之图的实现方法。分享给大家供大家参考。具体如下:

下面简要的介绍下:

比如有这么一张图:

    A -> B
    A -> C
    B -> C
    B -> D
    C -> D
    D -> C
    E -> F
    F -> C

可以用字典和列表来构建

graph = {'A': ['B', 'C'],
       'B': ['C', 'D'],
       'C': ['D'],
       'D': ['C'],
       'E': ['F'],
       'F': ['C']}

找到一条路径:

def find_path(graph, start, end, path=[]):
    path = path + [start]
    if start == end:
      return path
    if not graph.has_key(start):
      return None
    for node in graph[start]:
      if node not in path:
        newpath = find_path(graph, node, end, path)
        if newpath: return newpath
    return None

找到所有路径:

def find_all_paths(graph, start, end, path=[]):
    path = path + [start]
    if start == end:
      return [path]
    if not graph.has_key(start):
      return []
    paths = []
    for node in graph[start]:
      if node not in path:
        newpaths = find_all_paths(graph, node, end, path)
        for newpath in newpaths:
          paths.append(newpath)
    return paths

找到最短路径:

def find_shortest_path(graph, start, end, path=[]):
    path = path + [start]
    if start == end:
      return path
    if not graph.has_key(start):
      return None
    shortest = None
    for node in graph[start]:
      if node not in path:
        newpath = find_shortest_path(graph, node, end, path)
        if newpath:
          if not shortest or len(newpath) < len(shortest):
            shortest = newpath
    return shortest

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python的for和break循环结构中使用else语句的技巧
May 24 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
Oct 09 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
May 04 Python
python交换两个变量的值方法
Jan 12 Python
详解PANDAS 数据合并与重塑(join/merge篇)
Jul 09 Python
简单了解Python3里的一些新特性
Jul 13 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 Python
python读取Kafka实例
Dec 23 Python
如何基于python实现脚本加密
Dec 28 Python
python实现提取str字符串/json中多级目录下的某个值
Feb 27 Python
浅谈python锁与死锁问题
Aug 14 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 Python
python数据结构之图深度优先和广度优先实例详解
Jul 08 #Python
python中偏函数partial用法实例分析
Jul 08 #Python
Python使用bs4获取58同城城市分类的方法
Jul 08 #Python
Python实现批量修改文件名实例
Jul 08 #Python
Python查询阿里巴巴关键字排名的方法
Jul 08 #Python
浅谈Python中的闭包
Jul 08 #Python
Python中atexit模块的基本使用示例
Jul 08 #Python
You might like
php短域名转换为实际域名函数
2011/01/17 PHP
PHP中将数组转成XML格式的实现代码
2011/08/08 PHP
php模板函数 正则实现代码
2012/10/15 PHP
PHP中读取照片exif信息的方法
2014/08/20 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
2011/07/27 Javascript
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
node中IO以及定时器优先级详解
2019/05/10 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
利用python将图片转换成excel文档格式
2017/12/30 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
python 录制系统声音的示例
2020/12/21 Python
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
校庆标语集锦
2014/06/25 职场文书
兽医医药专业求职信
2014/07/27 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
论群众路线学习笔记
2014/11/06 职场文书
超市员工辞职信范文
2015/05/12 职场文书
南京南京观后感
2015/06/02 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电