国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

如何基于python實現不鄰接植花

瀏覽:6日期:2022-07-26 17:08:29

有 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 <= 100000 <= 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] = 1flowers=[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 編程
相關文章:
主站蜘蛛池模板: 中文字幕久久久 | 一级毛毛片毛片毛片毛片在线看 | 欧美做暖小视频xo免费 | 国产男女爽爽爽爽爽免费视频 | 伊人成人在线视频 | 亚洲专区在线 | 欧美大屁股精品毛片视频 | 精品手机在线视频 | 抱着cao才爽免费观看 | 奇米网狠狠干 | 欧美一区二区三区四区在线观看 | 一级中国乱子伦视频 | 5x社区直接进入一区二区三区 | 国产性videostv另类极品 | 在线免费观看精品 | 欧美亚洲综合另类在线观看 | 91精品乱码一区二区三区 | 日韩欧美一区二区在线观看 | 泷泽萝拉亚洲精品中文字幕 | 亚洲成 人a影院青久在线观看 | 99久久精品国产免费 | 亚洲人成网国产最新在线 | 久久精品99精品免费观看 | 国产亚洲精品免费 | 亚洲欧美日韩在线播放 | 成人黄18免费网站 | japanesevideo乱子| 免费久久| 成人黄色免费网址 | 精品国产成人高清在线 | 在线免费一级片 | 欧美日韩高清性色生活片 | 亚洲精品视 | 91精品国产免费久久久久久青草 | 在线不卡一区二区三区日韩 | 99www综合久久爱com | 欧美一级毛片免费网站 | 免费ab| 91资源在线播放 | 特级毛片在线播放 | 亚洲欧美第一 |