Pythonで敵が同じグループにとどまることができない人を分離するプログラム
数nと敵と呼ばれる2D行列があるとします。ここで、nは、[0、n-1]からラベル付けされたn人がいることを示します。これで、敵の各行に[a、b]が含まれます。これは、aとbが敵であることを意味します。敵である2人が同じグループに入らないように、n人を2つのグループに分割できるかどうかを確認する必要があります。
したがって、入力がn =4、敵=[[0、3]、[3、2]]の場合、これら2つのグループ[0、1、2]と[を使用できるため、出力はTrueになります。 3]。
これを解決するには、次の手順に従います-
-
グラフ:=空の隣接リスト
-
敵の各敵ペア(u、v)について、実行します
-
グラフの最後にvを挿入します[u]
-
グラフの最後にuを挿入します[v]
-
-
色:=新しい地図
-
関数dfs()を定義します。これにはu、c:=0が最初にかかります
-
uがカラーの場合、
-
color[u]がc
と同じ場合はtrueを返します
-
-
color [u]:=c
-
グラフ[u]の各vのすべてのdfs(v、c XOR 1)がtrueの場合、trueを返します
-
メインの方法から、次のようにします-
-
(0からnの範囲の各uのdfs(u)で、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
-
Pythonで隣接するノードが同じ色を持たないツリーに色を付けることができるかどうかを確認するプログラム
各ノードの値がその色を表す二分木があるとします。木にはせいぜい2色しかありません。接続されている2つのノードが同じ色にならないように、ノードの色を何度でも交換できるかどうかを確認する必要があります。 したがって、入力が次のような場合 そうすれば、出力はTrueになります これを解決するには、次の手順に従います- 色:=空の地図 prop:=空のマップ 関数dfs()を定義します。これはノードを取り、フラグを立てます ノードがnullの場合、 戻る 色[ノードの値]:=色[ノードの値] + 1 prop [flag]:=prop [flag] + 1 dfs(
-
マルチリスト内の同じインデックスにあるPythonグループ要素
このチュートリアルでは、同じインデックスの異なるリストの要素を1つのリストに結合するプログラムを作成します。そして、ここには1つの制約があります。すべてのリストは同じ長さである必要があります。それをより明確に理解するために例を見てみましょう。 入力 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 出力 [[1, 4, 7], [2, 5, 8], [3, 6, 9]] さまざまな方法で解決できます。通常のループで解決する方法を見てみましょう。 リストを使用してリストを初期化します。 空のリストを初期化します。 変数のインデックスを初期化します 0に。 サブリストの長さの