Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの一連の友達接続で友達グループの数を見つけるプログラム


友達リストがあるとします。ここで、friends[i]は私が友達である人々のリストです。友情のつながりは双方向です。そして、それぞれの人は自分自身と友達であり、2人の人は、お互いをつなぐ相互の友達の道がある限り、友達グループに属します。友達グループの総数を見つける必要があります。

したがって、入力がfriends =[[0、1、5]、[1、0]、[2]、[3、4]、[4、3]、[5、0]]の場合、出力は3つの友達グループは以下のとおりです-

Pythonの一連の友達接続で友達グループの数を見つけるプログラム

これを解決するには、次の手順に従います-

  • ノード:=友達のサイズ
  • 訪問:=ノードと同じサイズのリストでFalseで埋める
  • ans:=0
  • 関数dfs()を定義します。これは頂点を取り、訪問します
  • visited [vertex]:=True
  • フレンズ[頂点]の各neiについて、
    • visited [nei]がfalseの場合、
      • dfs(nei、visited)
  • メインの方法から、次の手順を実行します-
  • ノードまでの範囲が0のiの場合は、
    • visited [i]がfalseの場合、
      • dfs(i、訪問済み)
      • ans:=ans + 1
  • 回答を返す

理解を深めるために、次の実装を見てみましょう-

class Solution:
   def solve(self, friends):
      nodes = len(friends)
      visited = [False for _ in range(nodes)]
      ans = 0
      def dfs(vertex, visited): visited[vertex] = True
         for nei in friends[vertex]:
            if not visited[nei]:
               dfs(nei, visited)
      for i in range(nodes):
         if not visited[i]:
            dfs(i, visited)
            ans += 1
      return ans
ob = Solution()
friends = [ [0, 1, 5], [1, 0], [2], [3, 4], [4, 3], [5, 0] ]
print(ob.solve(friends))

入力

[[0, 1, 5],
[1, 0],
[2],
[3, 4],
[4, 3],
[5, 0]
]

出力

3

  1. Pythonで範囲内のノード数を見つけるプログラム

    BSTがあり、左と右の境界lとrもあるとすると、lとrの間に値が存在するルート内のすべてのノードの数を見つける必要があります。 したがって、入力が次のような場合 l =7、r =13の場合、8、10、12の3つのノードがあるため、出力は3になります。 これを解決するために、次の手順に従います- スタック:=スタックと最初にルートを挿入し、カウント:=0 スタックが空でないときに、実行します node:=スタックの最上位要素、およびポップ要素 ノードがnullでない場合、 l<=ノードのデータ<=rの場合、 count:=count + 1

  2. リスト内の最小数を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal