0466 - Gen Graf

From Bitnami MediaWiki

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

<syntaxhighlight lang="python3" line="1"> 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.")

</syntaxhighlight>