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设计模式之单例模式实例
Apr 26 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
Nov 21 Python
启动Atom并运行python文件的步骤
Nov 09 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 Python
Python秒算24点实现及原理详解
Jul 29 Python
python开头的coding设置方法
Aug 08 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
在django中使用apscheduler 执行计划任务的实现方法
Feb 11 Python
python_array[0][0]与array[0,0]的区别详解
Feb 18 Python
Python 使用Opencv实现目标检测与识别的示例代码
Sep 08 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
Sep 09 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 foreach循环使用详解与实例代码
2010/05/08 PHP
浅析php header 跳转
2013/06/17 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
javascript校验价格合法性实例(必须输入2位小数)
2014/05/05 Javascript
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
Javascript自定义事件详解
2017/01/13 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
2017/01/13 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
python将字典内容存入mysql实例代码
2018/01/18 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
如何让Java程序执行效率更高
2014/06/25 面试题
Android面试宝典
2013/08/06 面试题
总账会计岗位职责
2014/03/13 职场文书
最新离婚协议书范本
2014/08/19 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
结婚典礼主持词
2015/06/29 职场文书
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python