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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python语音规划路线_重新规划路线(python)

發布時間:2025/3/20 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python语音规划路线_重新规划路线(python) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

n 座城市,從 0 到 n-1 編號,其間共有 n-1 條路線。因此,要想在兩座不同城市之間旅行只有唯一一條路線可供選擇(路線網形成一顆樹)。去年,交通運輸部決定重新規劃路線,以改變交通擁堵的狀況。

路線用 connections 表示,其中 connections[i] = [a, b] 表示從城市 a 到 b 的一條有向路線。

今年,城市 0 將會舉辦一場大型比賽,很多游客都想前往城市 0 。

請你幫助重新規劃路線方向,使每個城市都可以訪問城市 0 。返回需要變更方向的最小路線數。

題目數據 保證 每個城市在重新規劃路線方向后都能到達城市 0 。

例子

image.png

思路:類似廣度優先搜索的思想,從初始節點開始,然后遍歷與其相鄰的節點,然后再遍歷這些節點的相鄰節點。而這題遍歷的時候去考慮邊的情況,如果該邊指向的是他前一個節點,則符合,反之,則不符合,需要變更方向。

python實現:

1,隊列(超出時間限制)

class Solution:

def minReorder(self, n: int, connections: List[List[int]]) -> int:

c=connections

que=[0]#存儲需要遍歷的節點

res=0

while que: #判斷節點是否全部遍歷完

x=que.pop() #出隊列

k=0

while k

if c[k][1]==x: #邊指向之前節點

que.append(c[k][0]) #加入下一節點

c.pop(k) #將遍歷的邊刪除

continue #繼續下一次遍歷

elif c[k][0]==x:

res+=1 #變更次數加一

que.append(c[k][1])

c.pop(k)

continue

k+=1

return res

改進第一種方法

class Solution:

def minReorder(self, n: int, connections: List[List[int]]) -> int:

c=connections

ans = 0

now = {0} #存儲需要遍歷的節點的集合

while len(now) != n: #判斷集合長度是否達到n

new = set() #新建集合

i = 0

while i < len(c): #遍歷存儲邊的列表

if c[i][1] in now:

new.add(c[i][0])#將下次要遍歷的節點保存起來

c.pop(i) #刪除邊

continue

elif c[i][0] in now:

ans += 1

new.add(c[i][1])

c.pop(i)

continue

i += 1

now |= new #將集合new加進集合now中

return ans

繼續改進

class Solution:

def minReorder(self, n: int, connections: List[List[int]]) -> int:

res = 0

ordered_set = {0} # 保存已經能正確到達0的城市

for (l, r) in connections:

if r in ordered_set: # r是已經能到0的城市,那么l->r后就可到0

ordered_set.add(l)

elif l in ordered_set: # r目前不可到城市0,l可到,那就讓r->l后到0,重修+1

res += 1

ordered_set.add(r)

return res

總結

以上是生活随笔為你收集整理的python语音规划路线_重新规划路线(python)的全部內容,希望文章能夠幫你解決所遇到的問題。

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