0437 - Conex

From Bitnami MediaWiki
Revision as of 10:30, 13 December 2023 by Simina (talk | contribs) (Pagină nouă: = Cerinţa = Se dă lista muchiilor unui graf neorientat. Să se verifice dacă graful este sau nu conex. = Date de intrare = Fişierul de intrare <code>conexIN.txt</code> conţine pe prima linie numărul <code>n</code>, reprezentând numărul de vârfuri ale grafului. Fiecare dintre următoarele linii conține câte o pereche de numere <code>i j</code>, cu semnificația că există muchie între <code>i</code> și <code>j</code>. = Date de ieşire = Fişierul de ieşire <c...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa[edit | edit source]

Se dă lista muchiilor unui graf neorientat. Să se verifice dacă graful este sau nu conex.

Date de intrare[edit | edit source]

Fişierul de intrare conexIN.txt conţine pe prima linie numărul n, reprezentând numărul de vârfuri ale grafului. Fiecare dintre următoarele linii conține câte o pereche de numere i j, cu semnificația că există muchie între i și j.

Date de ieşire[edit | edit source]

Fişierul de ieşire conexOUT.txt va conţine mesajul DA, dacă graful dat este conex, respectiv NU, în caz contrar.

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

  • 1 ≤ n ≤ 100
  • 1 ≤ i , j ≤ n
  • în fișierul de intrare muchiile se pot repeta

Exemplul 1[edit | edit source]

conexIN.txt

5
1 4 
3 5
2 4

conexOUT.txt

NU

Exemplul 2[edit | edit source]

conexIN.txt

101

conexOUT.txt

Datele nu corespund restrictiilor impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def respecta_restrictii(n, muchii):

   return 1 <= n <= 100 and all(1 <= i <= n and 1 <= j <= n for i, j in muchii)

def este_conex(n, muchii):

   # Verifică restricțiile
   if not respecta_restrictii(n, muchii):
       return "Datele nu corespund restrictiilor impuse"
   # Restul codului rămâne neschimbat
   lista_adiacenta = {i: set() for i in range(1, n + 1)}
   for muchie in muchii:
       x, y = muchie
       lista_adiacenta[x].add(y)
       lista_adiacenta[y].add(x)
   vizitat = set()
   def dfs(nod):
       vizitat.add(nod)
       for vecin in lista_adiacenta[nod]:
           if vecin not in vizitat:
               dfs(vecin)
   # Folosim DFS pentru a vizita toate nodurile din graf
   dfs(1)
   # Verificăm dacă toate nodurile au fost vizitate
   return "DA" if len(vizitat) == n else "NU"
  1. Citirea din fișierul de intrare

with open("conexIN.txt", "r") as fisier:

   n = int(fisier.readline())
   muchii = [tuple(map(int, linie.split())) for linie in fisier]
  1. Verifică restricțiile și scrie rezultatul în fișierul de ieșire

with open("conexOUT.txt", "w") as fisier:

   rezultat = este_conex(n, muchii)
   fisier.write(rezultat)

</syntaxhighlight>