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二叉树遍历的实现方法
Nov 21 Python
对Python字符串中的换行符和制表符介绍
May 03 Python
python+opencv实现阈值分割
Dec 26 Python
Python类和对象的定义与实际应用案例分析
Dec 27 Python
python异步存储数据详解
Mar 19 Python
set在python里的含义和用法
Jun 24 Python
django 中QuerySet特性功能详解
Jul 25 Python
Python实现括号匹配方法详解
Feb 10 Python
Python定时器线程池原理详解
Feb 26 Python
基于python图像处理API的使用示例
Apr 03 Python
Python爬虫如何破解JS加密的Cookie
Nov 19 Python
Python列表元素删除和remove()方法详解
Jan 04 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/05/29 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
javascript实现youku的视频代码自适应宽度
2015/05/25 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
微信小程序 教程之wxapp 视图容器 view
2016/10/19 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
js实现数字滚动特效
2019/12/16 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
2020/08/04 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
Python3里的super()和__class__使用介绍
2015/04/23 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
微信公众号token验证失败解决方案
2019/07/22 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
Python学习之time模块的基本使用
2021/01/17 Python
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
得到Class的三个过程是什么
2012/08/10 面试题
演讲稿的格式及范文
2014/08/22 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
留学推荐信中文范文
2015/03/26 职场文书
全陪导游词开场白
2015/05/29 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
vue项目支付功能代码详解
2022/02/18 Vue.js