0437 - Conex
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"
- 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]
- 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>