91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python實現不鄰接植花的方法

發布時間:2020-07-29 10:38:09 來源:億速云 閱讀:132 作者:小豬 欄目:開發技術

這篇文章主要講解了python實現不鄰接植花的方法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

有 N 個花園,按從 1 到 N 標記。在每個花園中,你打算種下四種花之一。

paths[i] = [x, y] 描述了花園 x 到花園 y 的雙向路徑。

另外,沒有花園有 3 條以上的路徑可以進入或者離開。

你需要為每個花園選擇一種花,使得通過路徑相連的任何兩個花園中的花的種類互不相同。

以數組形式返回選擇的方案作為答案 answer,其中 answer[i] 為在第 (i+1) 個花園中種植的花的種類。花的種類用 1, 2, 3, 4 表示。保證存在答案。

示例 1:

輸入:N = 3, paths = [[1,2],[2,3],[3,1]]

輸出:[1,2,3]

示例 2:

輸入:N = 4, paths = [[1,2],[3,4]]

輸出:[1,2,1,2]

示例 3:

輸入:N = 4, paths = [[1,2],[2,3],[3,4],[4,1],[1,3],[2,4]]

輸出:[1,2,3,4]

提示:

1 <= N <= 10000
0 <= paths.size <= 20000

不存在花園有 4 條或者更多路徑可以進入或離開。
保證存在答案。

知識準備

在python中可以使用列表作為隊列,list用append添加元素

可以用字典來存儲鄰接節點nei = {}

在集合中使用for循環

{res[j] for j in G[i]}

集合的pop函數

flowers = {1,2,3,4} #集合直接相減即可
flowers.pop()
# 集合不能獲取某個元素這樣子的操作
print(flowers)

out: {2,3,4}集合中的pop是從左邊開始取

集合的相減

flowers = {1,2,3,4}
h = {0}
flowers-h

out:{1,2,3,4}

我的題解

題解1

 
 class Solution:
   # 整體思路采用BFS方法,還需考慮不連通圖的問題,然后著手結果唯一
   def gardenNoAdj(self, N: int, paths: List[List[int]]) -> List[int]:
     #構建一個answer數組
     answer = [0 for _ in range(N)]
     #構建所有節點
     all_nodes = []
     [all_nodes.append(i) for i in range(1,N+1)]
     #構建visted列表
     visted = dict.fromkeys(all_nodes, 0)
     #初始化nei字典元素為空列表
     nei = [[] for _ in range(N)]
     # 構建無向鄰接表,無鄰居則不構建
     for path in paths:
       nei[path[0]-1].append(path[1])
       nei[path[1]-1].append(path[0])
     #遍歷每一個點,每個點保證自己鄰接點不是和自己相同就行
     answer[0] = 1 
     for node in range(1,N+1):  #遍歷所有節點
       visted[node] = 1
       fix = set()
       if(answer[node-1]==0): #如果為0,說明不是連通圖
         answer[node-1] = 1 
       flowers=[1,2,3,4]
       nei[node-1] = sorted(nei[node-1]) #排序鄰居節點
       flowers.pop(answer[node-1]-1) #彈出父節點的flowers
       for sinode in nei[node-1]: #遍歷鄰居
         if(visted[sinode] == 0): #如果鄰居未被訪問過
           answer[sinode-1] = flowers[0] #使用1,彈出1
           flowers.pop(0)
         else: #如果鄰居被訪問過
           if(answer[sinode-1]==answer[node-1]):
             answer[node-1] = flowers[0] 
             flowers.pop(0) 
           fix.add(answer[sinode-1])
       if not fix:
         continue
       else:
         flowers=[1,2,3,4]
         for a_val in list(fix):
           flowers.remove(a_val)
         answer[node-1] = flowers[0]
             
     return answer 

簡化方法:利用集合快速搞定

class Solution:
  def gardenNoAdj(self, N: int, paths: List[List[int]]) -> List[int]:
   #構建一個answer數組
    answer = [0]*N
    #初始化nei字典元素為空列表
    nei = [[] for _ in range(N)]
    # 構建無向鄰接表,無鄰居則不構建
    for path in paths:
      nei[path[0]-1].append(path[1])
      nei[path[1]-1].append(path[0])
    for node in range(1,N+1):  #遍歷所有節點
      flowers={1,2,3,4}
      #臨時存儲鄰居含有的花類型
      a = set()
      for sinode in nei[node-1]: #遍歷鄰居
        a.add(answer[sinode-1])
      flowers = flowers - a 
      answer[node-1] = flowers.pop()
                
    return answer

看完上述內容,是不是對python實現不鄰接植花的方法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿克| 通州区| 娄底市| 芜湖县| 上栗县| 花垣县| 衡南县| 时尚| 绥江县| 长岛县| 大同市| 阳东县| 百色市| 吉林省| 汽车| 溧阳市| 溆浦县| 澜沧| 明水县| 红河县| 房产| 旅游| 饶阳县| 文安县| 新闻| 共和县| 尼木县| 凯里市| 海南省| 新乡县| 望奎县| 乌恰县| 隆昌县| 德化县| 阳泉市| 钟山县| 依兰县| 江川县| 普陀区| 深水埗区| 焦作市|