0473 - Bipartit Complet: Difference between revisions

From Bitnami MediaWiki
Simina (talk | contribs)
Pagină nouă: = Cerinţa = Se consideră două mulţimi nevide <code>A</code> şi <code>B</code>, cu proprietatea că formează o partiție a mulțimii <code>{1,2,...,n}.</code> Să se construiască un graf bipartit complet cu <code>n</code> vârfuri, bipartit peste partiţia formată din mulțimile <code>A</code> și <code>B</code>. = Date de intrare = Fişierul de intrare <code>bipartitcompletIN.txt</code> conţine pe prima linie numărul <code>n</code>. Urmează un număr <code>k</code...
 
Simina (talk | contribs)
 
Line 6: Line 6:


= Date de ieşire =
= Date de ieşire =
Fişierul de ieşire <code>bipartitcompletOUT.txt</code> va conţine matricea de adiacență a grafului construit, câte o linie a matricei pe o linie a fișierului, elementele de pe o linie fiind separate prin exact un spațiu.
Fişierul de ieşire <code>bipartitcompletOUT.txt</code> va conţine matricea de adiacență a grafului construit, câte o linie a matricei pe o linie a fișierului, elementele de pe o linie fiind separate prin exact un spațiu.În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Nu corespunde restricțiilor impuse".


= Restricţii şi precizări =
= Restricţii şi precizări =

Latest revision as of 14:57, 27 December 2023

Cerinţa[edit | edit source]

Se consideră două mulţimi nevide A şi B, cu proprietatea că formează o partiție a mulțimii {1,2,...,n}. Să se construiască un graf bipartit complet cu n vârfuri, bipartit peste partiţia formată din mulțimile A și B.

Date de intrare[edit | edit source]

Fişierul de intrare bipartitcompletIN.txt conţine pe prima linie numărul n. Urmează un număr k, apoi k numere naturale distincte cuprinse între 1 și n, reprezentând vârfurile din A. Mulțimea B conține toate numerele naturale cuprinse între 1 și n care nu sunt în A.

Date de ieşire[edit | edit source]

Fişierul de ieşire bipartitcompletOUT.txt va conţine matricea de adiacență a grafului construit, câte o linie a matricei pe o linie a fișierului, elementele de pe o linie fiind separate prin exact un spațiu.În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Nu corespunde restricțiilor impuse".

Restricţii şi precizări[edit | edit source]

  • 1 < k < n ≤ 100

Exemplul 1:[edit | edit source]

bipartitcompletIN.txt

7
3 
4 6 3

bipartitcompletOUT.txt

0 0 1 1 0 1 0 
0 0 1 1 0 1 0 
1 1 0 0 1 0 1 
1 1 0 0 1 0 1 
0 0 1 1 0 1 0 
1 1 0 0 1 0 1 
0 0 1 1 0 1 0 

Exemplul 2 :[edit | edit source]

bipartitcompletIN.txt

1001
3 
4 6 3

bipartitcompletOUT.txt

Datele nu corespund restrictiilor impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def verifica_restrictii(k, n):

   if not (1 < k < n <= 100):
       with open("bipartitcompletOUT.txt", 'w') as f:
           f.write("Datele nu corespund restrictiilor impuse")
       return False
   return True

def construieste_graf(n, A):

   # Inițializăm matricea de adiacență cu zerouri
   graf = [[0] * n for _ in range(n)]
   # Marcam conexiunile dintre vârfurile din A și B
   for i in A:
       for j in range(1, n + 1):
           if j not in A:
               graf[i - 1][j - 1] = 1
               graf[j - 1][i - 1] = 1  # Adăugăm și conexiunea inversă
   return graf

def scrie_matrice_in_fisier(matrice, nume_fisier):

   with open(nume_fisier, 'w') as f:
       for linie in matrice:
           f.write(' '.join(map(str, linie)) + '\n')

if __name__ == "__main__":

   # Citim datele de intrare din fișier
   with open("bipartitcompletIN.txt", 'r') as f:
       n = int(f.readline().strip())
       k = int(f.readline().strip())
       A = list(map(int, f.readline().strip().split()))
   # Verificăm restricțiile
   if not verifica_restrictii(k, n):
       exit()
   # Construim graful bipartit
   graf = construieste_graf(n, A)
   # Scriem matricea de adiacență în fișierul de ieșire
   scrie_matrice_in_fisier(graf, "bipartitcompletOUT.txt")

</syntaxhighlight>