4072 - Graf Partial 5
Cerinţa[edit | edit source]
Se dă lista muchiilor unui graf neorientat cu n
vârfuri, etichetate de la 1
la n
și un număr natural k
. Din acest graf se elimină toate muchiile care au ambele extremități în vârfuri de grad mai mare sau egal cu k
. Să se afișeze matricea de adiacență a grafului parțial obținut.
Date de intrare[edit | edit source]
Fişierul de intrare graf_partial_5IN.txt
conţine pe prima linie numărul n
, reprezentând numărul de vârfuri ale grafului și numărul k
. 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 graf_partial_5OUT.txt
va conţine matricea de adiacență a grafului parțial obținut, câte o linie a matricei pe o linie a fișierului, elementele de pe fiecare linie fiind separate prin exact un spațiu.
Restricţii şi precizări[edit | edit source]
1 < k < n ≤ 100
1 ≤ i , j ≤ n
- muchiile se pot repeta în fișierul de intrare
Exemplul 1[edit | edit source]
graf_partial_5IN.txt
6 3 1 4 2 5 2 4 2 1 4 5 3 2 4 3 2 6 3 6
graf_partial_5OUT.txt
0 1 0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0
Explicație[edit | edit source]
Se elimină muchiile (2 3)
, (4 3)
, (2 4)
deoarece vârfurile 2
, 3
și 4
au gradul mai mare sau egal cu 3
.
Exemplul 2[edit | edit source]
graf_partial_5IN.txt
1000 1000
graf_partial_5OUT.txt
Datele nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def citeste_input(cale_fisier):
with open(cale_fisier, 'r') as fisier: n, k = map(int, fisier.readline().split()) muchii = [tuple(map(int, linie.split())) for linie in fisier] return n, k, muchii
def verifica_restrictii(n, k, muchii):
if not (1 < k < n <= 100): return False for muchie in muchii: if not (1 <= muchie[0] <= n and 1 <= muchie[1] <= n): return False return True
def construieste_matrice_adiacenta(n, muchii):
matrice = [[0] * n for _ in range(n)] for muchie in muchii: matrice[muchie[0] - 1][muchie[1] - 1] = 1 matrice[muchie[1] - 1][muchie[0] - 1] = 1 return matrice
def elimina_muchii_grad_inalt(matrice, k):
grade = [sum(rand) for rand in matrice] for i in range(len(matrice)): for j in range(len(matrice[i])): if grade[i] >= k and grade[j] >= k: matrice[i][j] = matrice[j][i] = 0 return matrice
def scrie_output(cale_fisier, matrice):
with open(cale_fisier, 'w') as fisier: for rand in matrice: fisier.write(' '.join(map(str, rand)) + '\n')
if __name__ == "__main__":
fisier_input = "graf_partial_5IN.txt" fisier_output = "graf_partial_5OUT.txt"
n, k, muchii = citeste_input(fisier_input)
if not verifica_restrictii(n, k, muchii): with open(fisier_output, 'w') as fisier: fisier.write("Datele nu corespund restrictiilor impuse") else: matrice_adiacenta = construieste_matrice_adiacenta(n, muchii) matrice_modificata = elimina_muchii_grad_inalt(matrice_adiacenta, k) scrie_output(fisier_output, matrice_modificata)
</syntaxhighlight>