0577 - AfisCircuite

De la Universitas 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

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()