0417 - Grad Max
Cerinţa[edit | edit source]
Se dă lista muchiilor unui graf neorientat. Să se afișeze vârfurile de grad maxim.
Date de intrare[edit | edit source]
Fişierul de intrare gradmaxIN.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 gradmaxOUT.txt
va conţine pe prima linie numărul m
de vârfuri de grad maxim, urmat de cele m
vârfuri de grad maxim ,în ordine crescătoare, separate prin exact un spațiu.
Restricţii şi precizări[edit | edit source]
1 ≤ n ≤ 100
1 ≤ i , j ≤ n
- muchiile se pot repeta în fișierul de intrare
Exemplul 1[edit | edit source]
gradmaxIN.txt
5 1 4 2 5 2 3 2 1 4 5 3 2 4 3
gradmaxOUT.txt
2 2 4
Exemplul 2[edit | edit source]
gradmaxIN.txt
101 1 4 2 5 2 3 2 1 4 5 3 2 4 3
gradmaxOUT.txt
Datele nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def citeste_graf(file_path):
with open(file_path, 'r') as file: n = int(file.readline().strip())
# Verifica restricțiile pentru numărul de vârfuri if not (1 <= n <= 100): return None, None, "Datele nu corespund restrictiilor impuse"
muchii = [tuple(map(int, line.strip().split())) for line in file]
# Verifica restricțiile pentru vârfurile muchiilor for i, j in muchii: if not (1 <= i <= n) or not (1 <= j <= n): return None, None, "Datele nu corespund restrictiilor impuse"
return n, muchii, None
def calculeaza_grad(n, muchii):
grad = [0] * (n + 1) for i, j in muchii: grad[i] += 1 grad[j] += 1 return grad
def vafuri_grad_maxim(grad):
max_grad = max(grad) vafuri_maxime = [i for i, val in enumerate(grad) if val == max_grad] return vafuri_maxime
def scrie_output(file_path, vafuri_maxime, eroare=None):
with open(file_path, 'w') as file: if eroare: file.write(eroare) else: file.write(f"{len(vafuri_maxime)}\n") file.write(" ".join(map(str, vafuri_maxime)))
if __name__ == "__main__":
file_input = "gradmaxIN.txt" file_output = "gradmaxOUT.txt"
n, muchii, eroare = citeste_graf(file_input)
scrie_output(file_output, [], eroare) if eroare else None
if not eroare: grad = calculeaza_grad(n, muchii) vafuri_maxime = vafuri_grad_maxim(grad) scrie_output(file_output, vafuri_maxime)
</syntaxhighlight>