原标题:数据结构图在python中的应用

程序世界里,有很多的数据结构,比如:堆、栈、链表等等,今天要讲的就是图数据结构啦。

相信大家都使用过或者听说过图数据库吧,我们就来看看最简单的图数据结构算法。

首先先来看一下图长什么样

从上图能看出,比如节点A可以到达C、D、B,节点B只能到达E。

ok,这就是最基本的了,接下来来了解下游戏规则,我们需要列出所有可能的路径,比如:列出A到E的所有路径。

而在代码里,我们可能需要首先通过 字典+列表 的方式给出路径的设计,比如:

Graph = {'A': ['B', 'C', 'D'],

'B': ['E'],

'C': ['D', 'F'],

'D': ['B', 'E', 'G'],

'E': [],

'F': ['D', 'G'],

'G': ['E']}

在接下来,我们需要告诉程序,我们需要从哪里开始,走到哪里去,也就是常说的起始点和终点。

search_graph(Graph, 'A', 'E')

让我们来看下完整的代码吧:

def search_graph(graph: dict, start, end):

_ret = []

generate_path(graph, [start], end, _ret)

# 这一步的排序可有可无,只不过为了显示好看

_ret.sort(key=lambda x: len(x))

return _ret

def generate_path(graph: dict, path, end, ret: list):

_state = path[-1]

# 如果起始点和终点是同一个位置,则结束

if _state == end:

ret.append(path)

else:

for _item in graph[_state]:

if _item not in path:

# path + [_item] 就是递归调用的关键参数,path的组成

generate_path(graph, path + [_item], end, ret)

if __name__ == '__main__':

_GRAPH = {'A': ['B', 'C', 'D'],

'B': ['E'],

'C': ['D', 'F'],

'D': ['B', 'E', 'G'],

'E': [],

'F': ['D', 'G'],

'G': ['E']}

_ret = search_graph(_GRAPH, 'A', 'E')

print("******************")

print(' path A to E')

print("******************")

for i in _ret:

print(i)

结果如下图:

主要的逻辑,大家可以拿张纸出来画画。

好啦,今天的内容就到这了,感兴趣的你,可以试试能不能走出来~

所有的代码都已上传至我的github:https://github.com/MiracleYoung/exercises返回搜狐,查看更多

责任编辑:

python中ret是什么意思_数据结构图在python中的应用相关推荐

  1. python使用pandas中的to_json函数将dataframe数据写入json文件中

    python使用pandas中的to_json函数将dataframe数据写入json文件中 目录 python使用pandas中的to_json函数将dataframe数据写入json文件中 #导入 ...

  2. oracle 数据库中执行数据库语句能找到数据,但是程序中却抓取不到

    oracle 数据库中执行数据库语句能找到数据,但是程序中却抓取不到? 原因:数据库中插入数据时没有commit,执行COMMIT后就可以查询到. 转载于:https://www.cnblogs.co ...

  3. Layui框架下:JS中根据后台查询到的数据动态往div中ul里面动态添加li

    Layui框架下:JS中根据后台查询到的数据动态往div中ul里面动态添加li 先建立好一个div和ul JS代码: $(function () { layui.admin.req({ url: _s ...

  4. wps透视表列总计移到顶部_数据透视表总计中的错误

    wps透视表列总计移到顶部 Pivot tables are a quick and easy way to summarize a table full of data, without fancy ...

  5. python接口测试非json的断言_荐在接口自动化测试中,如何利用Pytest + JSONPath 进行接口响应断言...

    之前有一篇文章,介绍了如何使用JSONSchema对接口响应进行断言,主要的适用场景是对响应的数据结构进行校验,保证客户端收到的数据结构稳定和合法.今天,介绍使用JSONPath对接口响应的值进行断言 ...

  6. python怎么写入到文件中_Python学习笔记之将数据写入到文件中

    原博文 2019-10-29 16:04 − 10-3 访客:编写一个程序,提示用户输入其名字:用户作出响应后,将其名字写入到文件guest.txt 中. 编写Python代码: 1 username ...

  7. python画画用哪库好_数据可视化哪款工具更好用?对比7款Python 数据图表工具的性能...

    更多腾讯海量技术文章,请关注云加社区:https://cloud.tencent.com/developer/column 作者:CDA数据分析师 摘要:Python 的科学栈相当成熟,各种应用场景都 ...

  8. python在建筑施工方面的应用_有哪些关于 Python 在建筑中的应用和教程?

    2018.02.09更新 (發現距離上一次更新馬上就要兩年了--) 嗯,兩年間發生了很多事.我也莫名其妙跑到ETH來了. 做起了Fab的優化,python已經完全不能滿足效率和複雜度的要求,走上了C+ ...

  9. python数据科学手册_数据科学的Python

    Python是开源的,可解释的高级语言,为面向对象的编程提供了很好的方法.它是数据科学家用于各种数据科学项目/应用程序的最佳语言之一.Python提供了强大的功能来处理数学,统计和科学功能.它提供了出 ...

最新文章

  1. NSStream线程阻塞处理
  2. 安装ftp连接linux服务器配置,Linux下FTP安装及配置(VSFTPD服务器安装配置、FTP客户端安装配置)...
  3. window.setTimeout() 和window.setInterval() 使用说明
  4. 解决jquey中当事件嵌套时,内层事件会执行多次的问题
  5. 《堡垒之夜》中你可能没注意到的设计
  6. 汽车电子专业知识篇(三)-双目视觉三大应用视觉深度、标定、立体匹配
  7. Mybatis Plus条件查询
  8. 似然函数(likelihood function)
  9. winrar 命令行参数使用
  10. Microsoft 补丁下载
  11. 《嵌入式 – GD32开发实战指南》第1章 开发环境搭建
  12. 百度音乐高调改名后 掉队的千千音乐还有机会吗?
  13. 微信小程序协同工作和发布
  14. 智协云店通+BitCOO扶持TEAx加入4WiN.io全球互贸链 | 翼次元空间+Fund++
  15. wamp mysql 密码_wamp如何设置数据库的密码
  16. 440 亿美元成交!Twitter 「卖身」马斯克
  17. 【JAVASE】HashMap与TreeMap的排序与存储对象的区别
  18. ABAP tRFC和qRFC
  19. 软件界面设计规范培训
  20. 如何用HTML5开发一款手机游戏

热门文章

  1. 观点:云大数据服务一定是终极形态吗?
  2. Qt5开发及实例学习之标准颜色对话框类QColorDialog:选择某种颜色
  3. 如何正确的在项目中接入微信JS-SDK
  4. 疯狂java讲义之流程控制与数组
  5. 大数据催生决策新模式 未来将改变更多
  6. Memcached、Redis OR Tair
  7. 用IP地址的用途理解Loopback接口
  8. 窗体和控件使用中的注意事项有哪些?
  9. cve-2017–10271 XMLDecoder 反序列化漏洞 原理分析
  10. python3 异步 semaphore 信号量 控制并发