环形回路算法(python3)
生活随笔
收集整理的這篇文章主要介紹了
环形回路算法(python3)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如題:
給出了一組數據,分別是起始點,終點,兩點間的距離,現要求指定某一點, 以該點為起點和終點,構建所有的環形回路并得出該回路的總長度 例如 給出 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]執行數據放在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# 遞歸獲得可以達到的下一級城市 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也是一個鏈表,它是可變數據類型,這就導致citys中的數據會隨著這個j的變化而變化# 每進行一次深層的迭代,這一層的 j 就變成了下一層的 i,我們必須保證 i 是獨立的,不能由# 于j的變化而導致i的變化,而且我們也必須保證,j 數據中的線路在我們加入 nextCity 鏈表后# 就失去了它的意義,此時它是可以任意改變并且無意義的一條數據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("去重后的環路:") for i in canUseArrange:print(i)總結
以上是生活随笔為你收集整理的环形回路算法(python3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为软件精英挑战赛参赛感悟
- 下一篇: 美化版缤纷彩色文字广告代码文字+网站添加