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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

环形回路算法(python3)

發(fā)布時間:2023/12/18 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 环形回路算法(python3) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如題:

給出了一組數(shù)據(jù),分別是起始點,終點,兩點間的距離,現(xiàn)要求指定某一點, 以該點為起點和終點,構(gòu)建所有的環(huán)形回路并得出該回路的總長度 例如 給出 A 點,要求輸出:['A-C-A', 32] ['A-B-C-A', 46] ['A-B-D-A', 61] ['A-C-D-A', 82] ['A-B-C-D-A', 96]

執(zhí)行數(shù)據(jù)放在csv文件中

程序:

import csv# 獲得所有城市的初始城市 def getHeadCitys(routeList):headList = []for i in routeList:if i[0] == orginCity:i.append(orginCity + "-" + i[1])headList.append(i)return headList# 遞歸獲得可以達(dá)到的下一級城市 def getNextCitys(routeList, citys):nextCitys = []for i in citys:for j in routeList:if i[1] == j[0] and j[1] == orginCity:finalStr = i[3] + "-" + j[1]arrangeList.append(finalStr)continueif j[1] in i[3]:continueif i[1] == j[0] and j[1] not in i[3]:if len(j) < 4:j.append(i[3] + "-" + j[1])else:j[3] = i[3] + "-" + j[1]# 因為j也是一個鏈表,它是可變數(shù)據(jù)類型,這就導(dǎo)致citys中的數(shù)據(jù)會隨著這個j的變化而變化# 每進(jìn)行一次深層的迭代,這一層的 j 就變成了下一層的 i,我們必須保證 i 是獨立的,不能由# 于j的變化而導(dǎo)致i的變化,而且我們也必須保證,j 數(shù)據(jù)中的線路在我們加入 nextCity 鏈表后# 就失去了它的意義,此時它是可以任意改變并且無意義的一條數(shù)據(jù)thisCity = j[:]nextCitys.append(thisCity)if len(nextCitys) == 0:returngetNextCitys(routeList, nextCitys)# 計算城市距離 def calculationDistance(arrange):citys = arrange.split("-")distance = 0for i in range(len(citys) - 1):for j in unitList:if j[0] == citys[i] and j[1] == citys[i + 1]:distance += int(j[2])breakreturn [arrange, distance]# ------------------------------------------------------------------datafile = open('test.csv', 'r', encoding="utf8") unitList = list(csv.reader(datafile))[1:]orginCity = "A" headCitys = getHeadCitys(unitList)arrangeList = [] getNextCitys(unitList, headCitys)canUseArrange = list(map(lambda x: calculationDistance(x), list(set(arrangeList)))) canUseArrange.sort(key=lambda elem: elem[1])print("去重后的環(huán)路:") for i in canUseArrange:print(i)

總結(jié)

以上是生活随笔為你收集整理的环形回路算法(python3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。