python实现 多叉树 寻找最短路径
完全原创,能力有限,欢迎参考,未经允许,请勿转载 !
完全原创,能力有限,欢迎参考,未经允许,请勿转载 !
完全原创,能力有限,欢迎参考,未经允许,请勿转载 !
完全原创,能力有限,欢迎参考,未经允许,请勿转载 !
多叉树的最短路径: 思想: 传入start 和 end 两个 目标值 1 找到从根节点到目标节点的路径 2 从所在路径,寻找最近的公共祖先节点, 3 对最近公共祖先根节点 拼接路径
1 import copy 2 3 #节点数据结构 4 class Node(object): 5 # 初始化一个节点 6 def __init__(self,value = None): 7 self.value = value # 节点值 8 self.child_list = [] # 子节点列表 9 # 添加一个孩子节点 10 def add_child(self,node): 11 self.child_list.append(node) 12 13 14 # 初始化一颗测试二叉树 15 def init(): 16 ''' 17 初始化一颗测试二叉树: 18 A 19 B C D 20 EFG HIJ 21 ''' 22 root = Node('A') 23 B = Node('B') 24 root.add_child(B) 25 root.add_child(Node('C')) 26 D = Node('D') 27 root.add_child(D) 28 B.add_child(Node('E')) 29 B.add_child(Node('F')) 30 B.add_child(Node('G')) 31 D.add_child(Node('H')) 32 D.add_child(Node('I')) 33 D.add_child(Node('J')) 34 return root 35 36 37 # 深度优先查找 返回从根节点到目标节点的路径 38 def deep_first_search(cur,val,path=[]): 39 path.append(cur.value) # 当前节点值添加路径列表 40 if cur.value == val: # 如果找到目标 返回路径列表 41 return path 42 43 if cur.child_list == []: # 如果没有孩子列表 就 返回 no 回溯标记 44 return 'no' 45 46 for node in cur.child_list: # 对孩子列表里的每个孩子 进行递归 47 t_path = copy.deepcopy(path) # 深拷贝当前路径列表 48 res = deep_first_search(node,val,t_path) 49 if res == 'no': # 如果返回no,说明找到头 没找到 利用临时路径继续找下一个孩子节点 50 continue 51 else : 52 return res # 如果返回的不是no 说明 找到了路径 53 54 return 'no' # 如果所有孩子都没找到 则 回溯 55 56 # 获取最短路径 传入两个节点值,返回结果 57 def get_shortest_path( start,end ): 58 # 分别获取 从根节点 到start 和end 的路径列表,如果没有目标节点 就返回no 59 path1 = deep_first_search(root, start, []) 60 path2 = deep_first_search(root, end, []) 61 if path1 == 'no' or path2 == 'no': 62 return '无穷大','无节点' 63 # 对两个路径 从尾巴开始向头 找到最近的公共根节点,合并根节点 64 len1,len2 = len(path1),len(path2) 65 for i in range(len1-1,-1,-1): 66 if path1[i] in path2: 67 index = path2.index(path1[i]) 68 path2 = path2[index:] 69 path1 = path1[-1:i:-1] 70 break 71 res = path1+path2 72 length = len(res) 73 path = '->'.join(res) 74 return '%s:%s'%(length,path) 75 76 77 78 79 80 # 主函数、程序入口 81 if __name__ == '__main__': 82 root = init() 83 res = get_shortest_path('F','I') 84 print(res)
转载于:https://www.cnblogs.com/Lin-Yi/p/7780777.html
python实现 多叉树 寻找最短路径相关推荐
- python最短路径例子_Python实现的多叉树寻找最短路径算法示例
本文实例讲述了Python实现的多叉树寻找最短路径算法.分享给大家供大家参考,具体如下: 多叉树的最短路径: 思想: 传入start 和 end 两个 目标值 1 找到从根节点到目标节点的路径 2 从 ...
- Python访问街区所有节点最短路径问题,并结合matplotlib可视化
Python访问街区所有节点最短路径问题,并结合matplotlib可视化 1. 效果图 2. 源码 2.1 5个点全排列(递归+非递归算法) 2.2 python遍历全路径计算距离+matplot可 ...
- python多叉树遍历_基于Python的多叉树遍历算法
[ 综直厘翹 S 赛理 ) 信息记录材料 2019 年 5 月第 20 卷第 5 期 基于 Python 的多叉树遍历算法 钱雨波 , 王金祥 ( 指导老师 ) ( 延边大学 吉林 延边 1 3300 ...
- vtkDijkstraGraphGeodesicPath在曲面上寻找最短路径的应用
本文由Markdown语法编辑器编辑完成. 1. 问题提出 在传统的医学软件中,标记测量一般包括距离(distance), 角度(angle), 椭圆或矩形ROI的面积.灰度均值和标准差等.这些测量一 ...
- 数据结构课程设计——项目2:校园导游咨询(图 Dijkstra算法寻找最短路径)
数据结构课程设计--项目2:校园导游咨询(图 Dijkstra算法寻找最短路径) 一.问题描述和项目要求 1.1 问题描述 1.2 基本要求 二.问题分析 2.1 程序功能设计分析 2.2 程序实现分 ...
- BFS广度优先遍历寻找最短路径(超详细实现过程)
广度优先遍历寻找最短路径 最近一直想搞A*算法,发现有部分没理解清楚.于是找到了广度优先遍历寻路算法学习了下,想看看可不可以对写A*有什么帮助.广度优先遍历寻路算法本身并不难,概括来说就是像雷达一样, ...
- java迷宫寻找最短路径
利用广度优先遍历算法的特点,由于迷宫每次只能走一格,所以对于任意一个节点,bfs第一次到达该点时一定是最短路径 直接上代码: package com.common.utils;import java. ...
- python求多叉树任意两点之间的距离
对于多叉树求两点之间的距离,最难的地方在于有没有思路,如何找到指定点的位置,以及如何去计算两个指定点之间的距离,下图是一个简单的的多叉树,从5到1的距离为2,从5到7的距离为4. 我们可以将求解两点之 ...
- python实现三叉树_使用python代码实现三叉搜索树高效率”自动输入提示”功能
最近项目中需要通过全拼音和简写拼音实现输入自动提示结果功能,查了一些资料发现三叉搜索树无论是在时间还是空间上都比较优秀. 三叉搜索树是trie树的演化版,除去了指针,这样在空间上节省不少,每个节点基本 ...
最新文章
- 第一届全国大学生智能汽车竞赛获奖名单
- initrd镜像文件的作用与制作
- Triangular Sums http://acm.nyist.net/JudgeOnline/problem.php?pid=122
- 方立勋_30天掌握JavaWeb_自己编写jdbc框架、dbutils框架(未完)
- Ubuntu kylin 14.04 LTS上安装opencv
- Windows中的用户和组以及用户密码破解
- 【对话系统】对话系统核心技术概要
- 大数据展示 定位_大数据平台 定位
- 【智能推荐】阿里云智能推荐AIRec文档说明与SDK测试
- 现在都在考华为认证,含金量高不高呢?该如何备考?
- VMWare中ubuntu打开终端方法
- 新海诚画集[秒速5センチメートル:樱花抄·铁道]
- 学会思考(转一位辩友的书单)
- java(数据存储)面试要点3
- 学python看小甲鱼还是黑马_P1 跟着小甲鱼(2019年新版)学习Python的第一天
- 音乐雷达 shazam算法_Shazam之类的音乐识别应用程序如何工作?
- Android 两个int类型的数相除结果应该是有小数的,但是为什么结果为0?
- 几款好用的随机密码生成器
- 线刷宝是不是一家技术流氓公司
- Vue中使用Echarts构建3D地球层+模拟时钟
热门文章
- arguments小结
- WAS6集群部署及初步测试
- how to deal with Demodex
- deepl真的有取代一般翻译的能力,这吞吐量和稳定性...亲测有效
- 英语听力里面的religion words
- etherpad an interactive approach for combining multiple sentences from different students in class
- 最新的Java SE平台和JDK版本发布计划
- 如何实现模拟人类视觉注意力的循环神经网络?
- 使用类计算矩形的面积
- 远程桌面连接错误:由于安全设置错误,客户端无法连接到远程计算机。