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

無向グラフでDFSを使用して接続されたすべてのコンポーネントを検索するPythonプログラム


無向グラフで深さ優先探索を使用してすべての連結成分を検索する必要がある場合、値の初期化、深さ優先探索トラバーサルの実行、連結成分の検索、グラフへのノードの追加などのメソッドを含むクラスが定義されます。クラスのインスタンスを作成し、メソッドにアクセスして操作し、実行することができます。

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

class Graph_struct:
   def __init__(self, V):
      self.V = V
      self.adj = [[] for i in range(V)]

   def DFS_Utililty(self, temp, v, visited):

      visited[v] = True

      temp.append(v)

      for i in self.adj[v]:
         if visited[i] == False:
            temp = self.DFS_Utililty(temp, i, visited)
      return temp

   def add_edge(self, v, w):
      self.adj[v].append(w)
      self.adj[w].append(v)

   def connected_components(self):
      visited = []
      conn_compnent = []
      for i in range(self.V):
         visited.append(False)
      for v in range(self.V):
         if visited[v] == False:
            temp = []
            conn_compnent.append(self.DFS_Utililty(temp, v, visited))
      return conn_compnent

my_instance = Graph_struct(5)
my_instance.add_edge(1, 0)
my_instance.add_edge(2, 3)
my_instance.add_edge(3, 0)
print("1-->0")
print("2-->3")
print("3-->0")
conn_comp = my_instance.connected_components()
print("The connected components are :")
print(conn_comp)

出力

1-->0
2-->3
3-->0
The connected components are :
[[0, 1, 3, 2], [4]]

説明

  • 「Graph_struct」という名前のクラスが定義されています。

  • ツリーに要素を追加するのに役立つ「add_edge」という名前のメソッドが定義されています。

  • 深さ優先探索アプローチを使用してツリーをトラバースするのに役立つ「DFS_Utility」メソッドが定義されています。

  • 「connected_components」という名前のメソッドが定義されています。これは、相互に接続されているノードを判別するのに役立ちます。

  • クラスのインスタンスが作成され、そのインスタンスでメソッドが呼び出されます。

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

  • 接続されたコンポーネントは、コンソールに出力として表示されます。


  1. Pythonを使用してすべてのノードに到達するための頂点の最小数を見つけるプログラム

    n個の頂点とノードに0からn-1までの番号が付けられた有向非巡回グラフがあるとします。グラフはエッジリストで表されます。ここで、edges [i] =(u、v)はノードuからノードv。グラフ内のすべてのノードに到達できる頂点の最小セットを見つける必要があります。 (頂点は任意の順序で返すことができます)。 したがって、入力が次のような場合 これらの2つの頂点は他のどの頂点からも到達できないため、出力は[0,2,3]になります。したがって、それらから開始すると、すべてをカバーできます。 これを解決するには、次の手順に従います- n:=エッジのサイズ all_nodes:=

  2. Unittestを使用したPythonプログラムでのユニットテスト

    この記事では、Python3.xで利用可能なunittestモジュールを使用して、ソフトウェアテストの基本について学習します。またはそれ以前。自動化、テストのセットアップと終了コードの共有、およびすべてのフレームワークの独立したテストが可能になります。 単体テストでは、さまざまなオブジェクト指向の概念を使用します。ここでは、主に使用されるいくつかの概念について説明します。 テストケース −これは、特定の入力セットに従った応答固有の基本クラスです。この操作を実装するには、ユニットテストの基本クラス、つまり「TestCase」を使用します。 テストスイート −テストケースをまとめて実