Python程式:將人員分組,確保無敵人處於同一組


假設我們有一個數字n和一個名為enemies的二維矩陣。這裡n表示有n個人,編號從[0, n - 1]。現在enemies中的每一行都包含[a, b],這意味著a和b是敵人。我們必須檢查是否可以將n個人分成兩組,使得沒有任何兩個敵人處於同一組。

因此,如果輸入類似於n = 4,enemies = [[0, 3],[3, 2]],則輸出為True,因為我們可以有這兩組[0, 1, 2]和[3]。

為了解決這個問題,我們將遵循以下步驟:

  • graph := 一個空的鄰接表

  • 對於enemies中的每個敵人對(u, v),執行以下操作:

    • 將v插入graph[u]的末尾

    • 將u插入graph[v]的末尾

  • color := 一個新的對映

  • 定義一個函式dfs()。它將接收u,c := 最初為0

  • 如果u在color中,則

    • 當color[u]與c相同時返回true

  • color[u] := c

  • 當graph[u]中每個v的dfs(v, c XOR 1)都為true時返回true

  • 從主方法執行以下操作:

  • 當(從0到n的每個u,如果u不在color中,則dfs(u))都為true時返回true

讓我們看看下面的實現,以便更好地理解:

示例

線上演示

class Solution:
   def solve(self, n, enemies):
      from collections import defaultdict
      graph = defaultdict(list)
      for u, v in enemies:
         graph[u].append(v)
         graph[v].append(u)
      color = {}
      def dfs(u, c=0):
         if u in color:
            return color[u] == c
            color[u] = c
            return all(dfs(v, c ^ 1) for v in graph[u])
         return all(dfs(u) for u in range(n) if u not in color)
ob = Solution()
n = 4
enemies = [[0, 3],[3, 2]]
print(ob.solve(n, enemies))

輸入

4, [[0, 3],[3, 2]]

輸出

True

更新於:2020年10月21日

522 次瀏覽

啟動你的職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.