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

Pythonですべてのコースを受講できるかどうかを確認するプログラム


2Dマトリックスがあり、matrix[i]がコースiの登録に必要な前提条件コースのリストを表しているとします。ここで、すべてのコースを受講できるかどうかを確認する必要があります。

したがって、入力がmatrix =[[1]、[2]、[]]のような場合、コース2、コース1、コース0の順に進むことができるため、出力はTrueになります。

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

  • 関数dfs()を定義します。これには私がかかります

  • vis [i]がtrueの場合、

    • falseを返す

  • chk [i]が真の場合、

    • Trueを返す

  • vis [i]:=True

  • 行列[i]のjごとに、実行

    • dfs(j)がfalseの場合、

      • Falseを返す

  • vis [i]:=False

  • chk [i]:=True

  • Trueを返す

  • メインの方法から、次のようにします-

  • vis:=行列の行数と同じサイズのリストで、最初はすべてfalse

  • chk:=行列の行数と同じサイズのリストで、最初はすべてfalse

  • 0から行列の行数までの範囲のiについては、次のようにします

    • dfs(i)がfalseの場合、

      • Falseを返す

  • Trueを返す

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

class Solution:
   def solve(self, matrix):
      vis=[False for _ in matrix]
      chk=[False for _ in matrix]
      def dfs(i):
         if vis[i]: return False
         if chk[i]: return True
         vis[i]=True
         for j in matrix[i]:
            if not dfs(j):
               return False
         vis[i]=False
         chk[i]=True
         return True
   for i in range(len(matrix)):
      if not dfs(i):
         return False
   return True
ob = Solution()
matrix = [ [1], [2], [] ]
print(ob.solve(matrix))

入力

matrix = [
   [1],
   [2],
   []
]

出力

True

  1. Pythonで奇数の長さのサイクルがグラフにあるかどうかを確認するプログラム

    無向グラフがあり、その中に奇数の長さのサイクルが見つかるかどうかを確認する必要があるとします。 したがって、入力がadj_list =[[1、2]、[0、3、4]、[0、3、4]、[1、2、4]、[1、2、3]] [0、1、3、4、2]、[1、3、4]、[2、3、4]のような奇数の長さのサイクルがあるため、出力はTrueになります。 これを解決するには、次の手順に従います- 関数dfs()を定義します。これはノードを取ります、私 ノードがパス内にある場合、 (i --path [node])が奇数の場合はtrueを返します ノードにアクセスした場合、 Falseを返す

  2. 与えられたグラフがPythonで2部グラフであるかどうかをチェックするプログラム

    無向グラフが1つあるとすると、グラフが2部グラフであるかどうかを確認する必要があります。グラフのすべてのエッジ{u、v}がAに1つのノードuを持ち、Bに別のノードvを持つように、グラフのノードを2つのセットAとBに分割できる場合、グラフは2部グラフであることがわかります。 したがって、入力が次のような場合 次に、出力はTrueになり、[0,4]はセットAにあり、[1,2,3]はセットBにあり、すべてのエッジはAからAまたはBからBではなく、AからBまたはBからAになります。 。 これを解決するために、次の手順に従います- 関数dfs()を定義します。これはソースを取ります