最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)的多叉樹尋找最短路徑算法示例

 更新時間:2018年07月30日 09:39:27   作者:稀里糊涂林老冷  
這篇文章主要介紹了Python實現(xiàn)的多叉樹尋找最短路徑算法,結(jié)合實例形式分析了Python使用深度優(yōu)先查找獲取多叉樹最短路徑相關(guān)操作技巧,需要的朋友可以參考下

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

多叉樹的最短路徑:

思想:

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

Python代碼:

# -*- coding:utf-8 -*-
import copy
#節(jié)點數(shù)據(jù)結(jié)構(gòu)
class Node(object):
  # 初始化一個節(jié)點
  def __init__(self,value = None):
    self.value = value # 節(jié)點值
    self.child_list = []  # 子節(jié)點列表
  # 添加一個孩子節(jié)點
  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
# 深度優(yōu)先查找 返回從根節(jié)點到目標(biāo)節(jié)點的路徑
def deep_first_search(cur,val,path=[]):
  path.append(cur.value) # 當(dāng)前節(jié)點值添加路徑列表
  if cur.value == val:  # 如果找到目標(biāo) 返回路徑列表
    return path
  if cur.child_list == []:  # 如果沒有孩子列表 就 返回 no 回溯標(biāo)記
    return 'no'
  for node in cur.child_list: # 對孩子列表里的每個孩子 進(jìn)行遞歸
    t_path = copy.deepcopy(path)  # 深拷貝當(dāng)前路徑列表
    res = deep_first_search(node,val,t_path)
    if res == 'no': # 如果返回no,說明找到頭 沒找到 利用臨時路徑繼續(xù)找下一個孩子節(jié)點
      continue
    else :
      return res # 如果返回的不是no 說明 找到了路徑
  return 'no' # 如果所有孩子都沒找到 則 回溯
# 獲取最短路徑 傳入兩個節(jié)點值,返回結(jié)果
def get_shortest_path( start,end ):
  # 分別獲取 從根節(jié)點 到start 和end 的路徑列表,如果沒有目標(biāo)節(jié)點 就返回no
  path1 = deep_first_search(root, start, [])
  path2 = deep_first_search(root, end, [])
  if path1 == 'no' or path2 == 'no':
    return '無窮大','無節(jié)點'
  # 對兩個路徑 從尾巴開始向頭 找到最近的公共根節(jié)點,合并根節(jié)點
  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)
# 主函數(shù)、程序入口
if __name__ == '__main__':
  root = init()
  res = get_shortest_path('F','I')
  print(res)

運行結(jié)果:

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

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • python繪圖模塊matplotlib示例詳解

    python繪圖模塊matplotlib示例詳解

    這篇文章主要介紹了python繪圖模塊matplotlib示例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Python第三方庫Click快速使用詳解

    Python第三方庫Click快速使用詳解

    這篇文章主要介紹了Python第三方庫Click的相關(guān)資料,本文通過實例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-12-12
  • Python實現(xiàn)自動化對Word文檔添加或移除行號

    Python實現(xiàn)自動化對Word文檔添加或移除行號

    Word文檔中的行號(行編號)功能是對于精細(xì)化的文檔編輯以及解析非常有用的功能,添加行號能夠極大地提升文檔的可讀性和定位效率,本文將介紹如何使用Python來實現(xiàn)自動化對Word文檔添加或移除行號,為文檔處理工作帶來便捷,需要的朋友可以參考下
    2024-07-07
  • python reverse反轉(zhuǎn)部分?jǐn)?shù)組的實例

    python reverse反轉(zhuǎn)部分?jǐn)?shù)組的實例

    今天小編就為大家分享一篇python reverse反轉(zhuǎn)部分?jǐn)?shù)組的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python實現(xiàn)批量修改圖片格式和大小的方法【opencv庫與PIL庫】

    Python實現(xiàn)批量修改圖片格式和大小的方法【opencv庫與PIL庫】

    這篇文章主要介紹了Python實現(xiàn)批量修改圖片格式和大小的方法,結(jié)合實例形式分析了Python基于opencv庫與PIL庫針對圖片的讀寫、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • Python使用itchat 功能分析微信好友性別和位置

    Python使用itchat 功能分析微信好友性別和位置

    這篇文章主要介紹了 Python使用itchat 功能分析微信好友性別和位置 的相關(guān)資料,需要的朋友可以參考下
    2019-08-08
  • python讀取圖片的幾種方式及圖像寬和高的存儲順序

    python讀取圖片的幾種方式及圖像寬和高的存儲順序

    這篇文章主要介紹了python讀取圖片的幾種方式及圖像寬和高的存儲順序,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • PyTorch中的拷貝與就地操作詳解

    PyTorch中的拷貝與就地操作詳解

    這篇文章主要給大家介紹了關(guān)于PyTorch中拷貝與就地操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 基于python編寫的五個拿來就能用的炫酷表白代碼分享

    基于python編寫的五個拿來就能用的炫酷表白代碼分享

    七夕快到了,所以本文小編將給給大家介紹五種拿來就能用的炫酷表白代碼,無限彈窗表白,愛心發(fā)射,心動表白,玫瑰花等表白代碼,需要的小伙伴快來試試吧
    2023-08-08
  • 一篇文章帶你了解幾個好用的Python技巧

    一篇文章帶你了解幾個好用的Python技巧

    這篇文章主要介紹了幾個Python小技巧,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10

最新評論

双江| 高邑县| 报价| 长春市| 油尖旺区| 宽甸| 嘉善县| 平安县| 文登市| 普宁市| 南宁市| 耿马| 和龙市| 瑞昌市| 德钦县| 新乡县| 方城县| 沭阳县| 长乐市| 赤壁市| 孟津县| 句容市| 河西区| 突泉县| 仁布县| 介休市| 佛坪县| 中卫市| 同德县| 安塞县| 岚皋县| 二连浩特市| 玛曲县| 呼和浩特市| 涡阳县| 沧源| 托克托县| 汾阳市| 云安县| 瑞安市| 望都县|