4068 - Grade K: Difference between revisions

From Bitnami MediaWiki
Simina (talk | contribs)
Pagină nouă: = Cerinţa = Se dă lista muchiilor unui graf neorientat și un nod <code>k</code>. Să se determine nodurile din graf care au gradul egal cu gradul nodului <code>k</code>. = Date de intrare = Fişierul de intrare <code>gradekIN.txt</code> conţine pe prima linie numerele <code>n k</code>, reprezentând numărul de noduri ale grafului și nodul dat. Fiecare dintre următoarele linii conține câte o pereche de numere <code>i j</code>, cu semnificația că există muchie înt...
 
Simina (talk | contribs)
No edit summary
 
Line 41: Line 41:
  3 4  
  3 4  
<code>gradekOUT.txt</code>
<code>gradekOUT.txt</code>
  Datele corespund restrictiilor impuse
  Datele nu corespund restrictiilor impuse


== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python3">
<syntaxhighlight lang="python3" line="1">
def gaseste_noduri_cu_grad_egal(n, k, muchii):
def verifica_restrictii(n, k, muchii):
     grad = [0] * (n + 1)
     # Verificăm restricțiile impuse
    if not (1 <= n <= 100):
        return False
    if not (1 <= k <= n):
        return False
    for i, j in muchii:
        if not (1 <= i <= n) or not (1 <= j <= n):
            return False
    return True


    for i, j in muchii:
def noduri_cu_grad_egalcu_k(n, k, muchii):
        grad[i] += 1
    graf = {}
         grad[j] += 1
   
    # Inițializăm dicționarul grafului
    for i in range(1, n+1):
         graf[i] = set()


     noduri_cu_grad_egal = [nod for nod in range(1, n + 1) if grad[nod] == grad[k]]
     # Adăugăm muchiile în graf
    for muchie in muchii:
        i, j = muchie
        graf[i].add(j)
        graf[j].add(i)


     return noduri_cu_grad_egal
     # Calculăm gradul nodului k
    grad_k = len(graf[k])


def citeste_date_intrare(file_path):
     # Determinăm nodurile cu gradul egal cu gradul nodului k
     try:
    noduri_egale = [nod for nod, vecini in graf.items() if len(vecini) == grad_k]
        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
     return noduri_egale


# Citim datele de intrare
try:
try:
     n, k, muchii = citeste_date_intrare('gradekIN.txt')
     with open("gradekIN.txt", "r") as f:
     rezultat = gaseste_noduri_cu_grad_egal(n, k, muchii)
        n, k = map(int, f.readline().split())
     with open('gradekOUT.txt', 'w') as f:
        muchii = [tuple(map(int, line.split())) for line in f.readlines()]
         f.write(str(len(rezultat)) + '\n')
 
        f.write(' '.join(map(str, rezultat)) + '\n')
    # Verificăm restricțiile
except ValueError as e:
    if not verifica_restrictii(n, k, muchii):
     pass
        raise ValueError
 
     # Determinăm nodurile cu gradul egal cu gradul nodului k
    noduri_rezultat = noduri_cu_grad_egalcu_k(n, k, muchii)
 
    # Scriem rezultatul în fișierul de ieșire
     with open("gradekOUT.txt", "w") as f:
         if noduri_rezultat:
            f.write(str(len(noduri_rezultat)) + "\n")
            f.write(" ".join(map(str, noduri_rezultat)))
        else:
            f.write("Nu există noduri cu gradul egal cu gradul nodului k")
 
except ValueError:
    with open("gradekOUT.txt", "w") as f:
        f.write("Datele nu corespund restrictiilor impuse")
except Exception as e:
     with open("gradekOUT.txt", "w") as f:
        f.write("A apărut o eroare în timpul procesării datelor.\n")
        f.write(str(e))


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 21:20, 12 December 2023

Cerinţa[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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

Exemplul 1[edit | edit source]

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[edit | edit source]

gradekIN.txt

5 101
1 4 
1 3 
3 5 
4 5 
2 4 
1 2 
4 2 
3 4 

gradekOUT.txt

Datele nu corespund restrictiilor impuse

Rezolvare[edit | edit source]

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

   # Verificăm restricțiile impuse
   if not (1 <= n <= 100):
       return False
   if not (1 <= k <= n):
       return False
   for i, j in muchii:
       if not (1 <= i <= n) or not (1 <= j <= n):
           return False
   return True

def noduri_cu_grad_egalcu_k(n, k, muchii):

   graf = {}
   
   # Inițializăm dicționarul grafului
   for i in range(1, n+1):
       graf[i] = set()
   # Adăugăm muchiile în graf
   for muchie in muchii:
       i, j = muchie
       graf[i].add(j)
       graf[j].add(i)
   # Calculăm gradul nodului k
   grad_k = len(graf[k])
   # Determinăm nodurile cu gradul egal cu gradul nodului k
   noduri_egale = [nod for nod, vecini in graf.items() if len(vecini) == grad_k]
   return noduri_egale
  1. Citim datele de intrare

try:

   with open("gradekIN.txt", "r") as f:
       n, k = map(int, f.readline().split())
       muchii = [tuple(map(int, line.split())) for line in f.readlines()]
   # Verificăm restricțiile
   if not verifica_restrictii(n, k, muchii):
       raise ValueError
   # Determinăm nodurile cu gradul egal cu gradul nodului k
   noduri_rezultat = noduri_cu_grad_egalcu_k(n, k, muchii)
   # Scriem rezultatul în fișierul de ieșire
   with open("gradekOUT.txt", "w") as f:
       if noduri_rezultat:
           f.write(str(len(noduri_rezultat)) + "\n")
           f.write(" ".join(map(str, noduri_rezultat)))
       else:
           f.write("Nu există noduri cu gradul egal cu gradul nodului k")

except ValueError:

   with open("gradekOUT.txt", "w") as f:
       f.write("Datele nu corespund restrictiilor impuse")

except Exception as e:

   with open("gradekOUT.txt", "w") as f:
       f.write("A apărut o eroare în timpul procesării datelor.\n")
       f.write(str(e))

</syntaxhighlight>