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

無向グラフにBFSを使用したサイクルが含まれているかどうかを確認するPythonプログラム


ツリーのすべてのノードの合計を見つける必要がある場合は、クラスが作成されます。このクラスには、ルートノードの設定、ツリーへの要素の追加、特定の要素の検索、およびツリーの要素の追加を行うためのメソッドが含まれています。合計などを見つけます。これらのメソッドにアクセスして使用するために、クラスのインスタンスを作成できます。

以下は同じのデモンストレーションです-

from collections import deque

def add_edge(adj: list, u, v):
   adj[u].append(v)
   adj[v].append(u)

def detect_cycle(adj: list, s, V, visited: list):

   parent = [-1] * V

   q = deque()

   visited[s] = True
   q.append(s)

   while q != []:

      u = q.pop()

      for v in adj[u]:
         if not visited[v]:
            visited[v] = True
            q.append(v)
            parent[v] = u
         elif parent[u] != v:
            return True
   return False

def cycle_disconnected(adj: list, V):

   visited = [False] * V

   for i in range(V):
      if not visited[i] and detect_cycle(adj, i, V, visited):
         return True
   return False

if __name__ == "__main__":
   V = 5
   adj = [[] for i in range(V)]
   add_edge(adj, 0, 1)
   add_edge(adj, 1, 2)
   add_edge(adj, 2, 0)
   add_edge(adj, 2, 3)
   add_edge(adj, 2, 1)

   if cycle_disconnected(adj, V):
      print("There are 5 vertices in the graph")
      print("0-->1")
      print("1-->2")
      print("2-->0")
      print("2-->3")
      print("2-->1")
      print("Is there a cycle ?")
      print("Yes")
   else:
      print("There are 5 vertices in the graph")
      print("0-->1")
      print("1-->2")
      print("2-->0")
      print("2-->3")
      print("2-->1")
      print("Is there a cycle ?")
      print("Yes")
      print("No")
>

出力

There are 5 vertices in the graph
0-->1
1-->2
2-->0
2-->3
2-->1
Is there a cycle ?
Yes

説明

  • 必要なパッケージがインポートされます。

  • グラフにノードを追加するのに役立つ「add_edge」という名前の別のメソッドが定義されています。

  • グラフのコンポーネントが接続されたときにサイクルが形成されるかどうかを判断するのに役立つ「detect_cycle」という名前のメソッドが定義されています。

  • 「cycle_disconnected」という名前の別のメソッドが定義されており、サイクルが接続されているかどうかを判断するのに役立ちます。

  • 「add_edge」メソッドを使用して要素がグラフに追加されます。

  • コンソールに表示されます。

  • 「cycle_disconnected」メソッドが呼び出され、出力がコンソールに表示されます。


  1. グラフがPythonのすべての人によってトラバース可能かどうかを確認するプログラム

    0からn-1までの番号が付けられたn個の頂点を含むグラフが与えられたとします。グラフは無向であり、各エッジには重みがあります。グラフには3種類の重みを設定でき、各重みは特定のタスクを示します。グラフをトラバースできるのは、ジャックとケーシーの2人です。エッジの重みが1の場合、ジャックはグラフをトラバースできます。重みが2の場合、ケーシーはグラフをトラバースできます。エッジの重みが3の場合、両方がグラフをトラバースできます。グラフを両方でトラバース可能にするために必要なエッジをすべて削除する必要があります。ジャックとケーシー。グラフをトラバース可能にするために削除するエッジの数を返します。トラバ

  2. 無向グラフにPythonで指定されたサイズの独立集合が含まれているかどうかを確認します

    与えられた無向グラフがあるとしましょう。サイズlの独立集合が含まれているかどうかを確認する必要があります。サイズlの独立したセットがある場合は、「はい」を返します。それ以外の場合は「いいえ」を返します。 グラフ内の独立集合は、互いに直接接続されていない頂点の集合として定義されていることに注意する必要があります。 したがって、入力がL =4のような場合、 その場合、出力はyesになります これを解決するには、次の手順に従います- 関数is_valid()を定義します。これはグラフを取ります、arr 0からarrのサイズまでの範囲のiの場合、実行します i + 1