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

本文实例讲述了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数据结构之图的实现方法的更多相关文章

  1. python数据结构之图的实现

    python数据结构之图的实现,官方有一篇文章介绍,http://www.python.org/doc/essays/graphs.html 下面简要的介绍下: 比如有这么一张图: A -> B ...

  2. python数据结构之图深度优先和广度优先实例详解

    本文实例讲述了python数据结构之图深度优先和广度优先用法.分享给大家供大家参考.具体如下: 首先有一个概念:回溯 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标.但当探索到 ...

  3. python 数据结构之图的储存方式

    参考链接:https://blog.csdn.net/u014281392/article/details/79120406 所描述的图的结构为: 下面介绍不同的储存方式,我想不必详细分别是每个名称都 ...

  4. python数据结构之图深度优先和广度优先

    首先有一个概念:回溯 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法 ...

  5. 利用python+graphviz绘制数据结构关系图和指定目录下头文件包含关系图

    作为一名linux系统下的C语言开发,日常工作中经常遇到两个问题: 一是分析代码过程中,各种数据结构互相关联,只通过代码很难理清系统中所有结构体的整体架构,影响代码消化的效率; 二是多层头文件嵌套包含 ...

  6. Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例

    本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...

  7. Python数据结构与算法之图的广度优先与深度优先搜索算法示例

    本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法.分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 ...

  8. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  9. Python数据结构之三——dict(字典)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 知识源于生活.Python也是如此. 提到字典,我首先想到的是数学大师--高斯. 为何想起他呢?这主要是因为高斯算法 ...

随机推荐

  1. Shiro学习(14)SSL

    对于SSL的支持,Shiro只是判断当前url是否需要SSL登录,如果需要自动重定向到https进行访问. 首先生成数字证书,生成证书到D:\localhost.keystore 使用JDK的keyt ...

  2. 把sublime添加到右键快捷菜单

    方法一: 新建sublime_addright.reg文件 编辑后双击打开就OK 括号内是sublime安装路径:使用的时候去掉括号 open sublimeText3 是提示文字 Windows R ...

  3. 暴力枚举+扫描线+线段树——cf1194E

    /*思路就是枚举矩形下面那条先,把所有和其交叉的竖线更新进线段树,然后扫描先向上更新,遇到竖线上端点就在线段树里删掉,遇到横线就更新答案*/#include<bits/stdc++.h> ...

  4. SVG和canvas

    1.SVG实现的圆环旋转效果 参考:http://www.softwhy.com/article-6472-1.html 2.SVG中的图形可以通过  transform="matrix(0 ...

  5. 关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路

    自从用RF工具做自动化测试以来,碰到过三次标题中的问题.头两次问别人解决了,第三次就自己动手解决,并记录下来. 第一次碰到这个问题,以为问题很小,没有放在心上,同事帮忙弄出来了. 别人帮忙弄的,记忆力 ...

  6. __iomem作用

    最近在看网卡驱动时查看ioremap函数发现调用最低层用__iomem修饰了ioremap的第一个参数(unsigned int)ioremap(S3C24XX_PA_CS8900, SZ_1M) + ...

  7. ebay上传图片的要求

    eBay's Picture Requirements Introduction to Pictures in Listings Pictures make an item more appealin ...

  8. 在一台机上搭建多个MYSQL并设置主从

    安装 cd /usr/local/src/ -linux2.-x86_64.tar.gz -linux2.-x86_64 /usr/local/mysql grep mysql /etc/passwd ...

  9. 在jeecg中如何配置多对一和多对多的关系

    多对多: mappedBy指的是当前的类对应的表, cascade属性的可能值有 all: 所有情况下均进行关联操作,即save-update和delete. none: 所有情况下均不进行关联操作. ...

  10. 3.5 compose redux sages

    基于 redux-thunk 的实现特性,可以做到基于 promise 和递归的组合编排,而 redux-saga 提供了更容易的更高级的组合编排方式(当然这一切要归功于 Generator 特性), ...