4068 - Grade K
Cerinţa
Se dă lista muchiilor unui graf neorientat și un nod k
. Să se determine nodurile din graf care au gradul egal cu gradul nodului k
.
Date de intrare
Fişierul de intrare gradekIN.txt
conţine pe prima linie numerele n k
, reprezentând numărul de noduri ale grafului și nodul dat. 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
Fişierul de ieşire gradekOUT.txt
va conţine pe prima linie numărul p
de noduri determinate, iar pe linia a doua cele p
noduri determinate, în ordine crescătoare.
Restricţii şi precizări
1 ≤ n ≤ 100
1 ≤ i , j ≤ n
- muchiile se pot repeta în fișierul de intrare
Exemplul 1
gradekIN.txt
5 3 1 4 1 3 3 5 4 5 2 4 1 2 4 2 3 4
gradekOUT.txt
2 1 3
Exemplul 2
gradekIN.txt
5 101 1 4 1 3 3 5 4 5 2 4 1 2 4 2 3 4
gradekOUT.txt
Datele corespund restrictiilor impuse
Rezolvare
<syntaxhighlight lang="python3"> def gaseste_noduri_cu_grad_egal(n, k, muchii):
grad = [0] * (n + 1)
for i, j in muchii: grad[i] += 1 grad[j] += 1
noduri_cu_grad_egal = [nod for nod in range(1, n + 1) if grad[nod] == grad[k]]
return noduri_cu_grad_egal
def citeste_date_intrare(file_path):
try: with open(file_path, 'r') as f: n, k = map(int, f.readline().split()) if not (1 <= n <= 100): raise ValueError("Datele corespund restrictiilor impuse") if not (1 <= k <= n): raise ValueError("Datele corespund restrictiilor impuse") muchii = [list(map(int, line.split())) for line in f.readlines()] for i, j in muchii: if not (1 <= i <= n) or not (1 <= j <= n): raise ValueError("Datele corespund restrictiilor impuse") except ValueError as e: with open('gradekOUT.txt', 'w') as out_file: out_file.write(str(e) + '\n') exit()
return n, k, muchii
try:
n, k, muchii = citeste_date_intrare('gradekIN.txt') rezultat = gaseste_noduri_cu_grad_egal(n, k, muchii) with open('gradekOUT.txt', 'w') as f: f.write(str(len(rezultat)) + '\n') f.write(' '.join(map(str, rezultat)) + '\n')
except ValueError as e:
pass
</syntaxhighlight>