国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現的多叉樹尋找最短路徑算法示例

2020-02-15 22:18:15
字體:
來源:轉載
供稿:網友

本文實例講述了Python實現的多叉樹尋找最短路徑算法。分享給大家供大家參考,具體如下:

多叉樹的最短路徑:

思想:

    傳入start 和 end 兩個 目標值
    1 找到從根節點到目標節點的路徑
    2 從所在路徑,尋找最近的公共祖先節點,
    3 對最近公共祖先根節點 拼接路徑

Python代碼:

# -*- coding:utf-8 -*-import copy#節點數據結構class Node(object):  # 初始化一個節點  def __init__(self,value = None):    self.value = value # 節點值    self.child_list = []  # 子節點列表  # 添加一個孩子節點  def add_child(self,node):    self.child_list.append(node)# 初始化一顆測試二叉樹def init():  '''  初始化一顆測試二叉樹:      A    B  C  D   EFG    HIJ  '''  root = Node('A')  B = Node('B')  root.add_child(B)  root.add_child(Node('C'))  D = Node('D')  root.add_child(D)  B.add_child(Node('E'))  B.add_child(Node('F'))  B.add_child(Node('G'))  D.add_child(Node('H'))  D.add_child(Node('I'))  D.add_child(Node('J'))  return root# 深度優先查找 返回從根節點到目標節點的路徑def deep_first_search(cur,val,path=[]):  path.append(cur.value) # 當前節點值添加路徑列表  if cur.value == val:  # 如果找到目標 返回路徑列表    return path  if cur.child_list == []:  # 如果沒有孩子列表 就 返回 no 回溯標記    return 'no'  for node in cur.child_list: # 對孩子列表里的每個孩子 進行遞歸    t_path = copy.deepcopy(path)  # 深拷貝當前路徑列表    res = deep_first_search(node,val,t_path)    if res == 'no': # 如果返回no,說明找到頭 沒找到 利用臨時路徑繼續找下一個孩子節點      continue    else :      return res # 如果返回的不是no 說明 找到了路徑  return 'no' # 如果所有孩子都沒找到 則 回溯# 獲取最短路徑 傳入兩個節點值,返回結果def get_shortest_path( start,end ):  # 分別獲取 從根節點 到start 和end 的路徑列表,如果沒有目標節點 就返回no  path1 = deep_first_search(root, start, [])  path2 = deep_first_search(root, end, [])  if path1 == 'no' or path2 == 'no':    return '無窮大','無節點'  # 對兩個路徑 從尾巴開始向頭 找到最近的公共根節點,合并根節點  len1,len2 = len(path1),len(path2)  for i in range(len1-1,-1,-1):    if path1[i] in path2:      index = path2.index(path1[i])      path2 = path2[index:]      path1 = path1[-1:i:-1]      break  res = path1+path2  length = len(res)  path = '->'.join(res)  return '%s:%s'%(length,path)# 主函數、程序入口if __name__ == '__main__':  root = init()  res = get_shortest_path('F','I')  print(res)

運行結果:

5:F->B->A->D->I

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python數據結構與算法教程》、《Python編碼操作技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程》

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 砚山县| 连云港市| 任丘市| 四川省| 基隆市| 互助| 义马市| 绥化市| 乃东县| 嘉义县| 房产| 达拉特旗| 临清市| 团风县| 荥阳市| 额尔古纳市| 怀宁县| 平谷区| 武强县| 钦州市| 大洼县| 潢川县| 通辽市| 邵阳县| 古丈县| 百色市| 望城县| 古蔺县| 潼关县| 府谷县| 兴安县| 临澧县| 芮城县| 三穗县| 无棣县| 双柏县| 南平市| 九江县| 开江县| 洛川县| 治多县|