0466 - Gen Graf

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerinţa

Se dă un număr natural n. Construiți toate grafurile neorientate cu n vârfuri.

Date de intrare

Fişierul de intrare gengrafIN.txt conţine pe prima linie numărul n.

Date de ieşire

Fişierul de ieşire gengrafOUT.txt va conţine pe prima linie numărul de grafuri generate M; urmează M matrice de adiacență ale acestor grafuri.

Fiecare matrice va fi afișată astfel: câte o linie a matricei pe o linie a fișierului, elementele de pe o linie fiind separate prin exact un spațiu. După fiecare matrice afișată se va găsi în fișier o linie goală.

Restricţii şi precizări

  • 2 ≤ n ≤ 6
  • cele M matrice de adiacență construite pot fi afișate în orice ordine

Exemplul 1

gengrafIN.txt:

3

gengrafOUT.txt:

8

0 0 0

0 0 0

0 0 0

0 1 0

1 0 0

0 0 0

0 0 1

0 0 0

1 0 0

0 1 1

1 0 0

1 0 0

0 0 0

0 0 1

0 1 0

0 1 0

1 0 1

0 1 0

0 0 1

0 0 1

1 1 0

0 1 1

1 0 1

1 1 0

Exemplul 2

gengrafIN.txt:

7

Output:

Valoarea lui n nu respectă restricția 2 <= n <= 6.

Rezolvare

def generate_graphs(n):
    graphs = []
    for i in range(2**(n*(n-1)//2)):
        graph_matrix = [[0]*n for _ in range(n)]
        idx = 0
        for j in range(n):
            for k in range(j+1, n):
                graph_matrix[j][k] = graph_matrix[k][j] = (i >> idx) & 1
                idx += 1
        graphs.append(graph_matrix)
    return graphs

def write_to_file(graphs, filename):
    with open(filename, 'w') as file:
        file.write(str(len(graphs)) + '\n')
        for graph in graphs:
            for row in graph:
                file.write(' '.join(map(str, row)) + '\n')
            file.write('\n')

def check_n_range(n):
    return 2 <= n <= 6

if __name__ == "__main__":
    with open('gengrafIN.txt', 'r') as input_file:
        n = int(input_file.readline().strip())

    if check_n_range(n):
        graphs = generate_graphs(n)
        write_to_file(graphs, 'gengrafOUT.txt')
    else:
        print("Valoarea lui n nu respectă restricția 2 <= n <= 6.")