0577 - AfisCircuite

From Bitnami MediaWiki

Cerința

Se dă lista arcelor unui graf orientat. Să se afișeze, în ordine lexicografică, toate circuitele de lungime trei.

Date de intrare

Programul citește de la tastatură numărul n de noduri și numărul m de arce, iar apoi lista arcelor, formată din m perechi de forma i j, cu semnificația că există arc orientat de la nodul i la nodul j.

Date de ieșire

Programul va afișa pe ecran circuitele cerute, câte un circuit pe o linie a ecranului, nodurile unui circuit fiind separate prin exact un spațiu.

Restricții și precizări

  • 1 ≤ n ≤ 100

Exemplul 1:

5 7
1 3
2 5
3 2
3 4
4 2
5 4
5 1

Ieșire

2 5 4
4 2 5
5 4 2

Exemplul 2:

101 23

Ieșire

Datele nu corespund restrictiilor impuse

Rezolvare

<syntaxhighlight lang="python3" line="1"> nMAX = 100

def verifica_restrictii(n):

   if 1 <= n <= nMAX:
       return True
   else:
       print("Datele nu corespund restrictiilor impuse.")
       return False

def main():

   n, m = map(int, input("Introduceti numarul de noduri si muchii: ").split())
   
   # Verificăm dacă `n` respectă restricțiile impuse
   if not verifica_restrictii(n):
       return
   
   gf = [[False for _ in range(nMAX + 1)] for _ in range(nMAX + 1)]
   print("Introduceti muchiile:")
   for _ in range(m):
       a, b = map(int, input().split())
       gf[a][b] = True
   for i in range(1, n + 1):
       for j in range(1, n + 1):
           if gf[i][j]:
               for h in range(1, n + 1):
                   if gf[j][h] and gf[h][i]:
                       print(f"Triplet gasit: {i} {j} {h}")

if __name__ == "__main__":

   main()

</syntaxhighlight>