日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python最短路径例子_Python实现的多叉树寻找最短路径算法示例

發布時間:2023/12/2 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python最短路径例子_Python实现的多叉树寻找最短路径算法示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文實例講述了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实现的多叉树寻找最短路径算法示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。