Cod sursa(job #3140180)

Utilizator ionutthnumele meu ionutth Data 4 iulie 2023 17:34:25
Problema Triangulare Scor 0
Compilator py Status done
Runda Arhiva ICPC Marime 1.87 kb
from collections import deque

class Nod:
  def __init__(self, inf, par=None):
    self.informatie = inf
    self.parinte = par
  
  def drumRadacina(self):
    nod = self
    lst = []

    while nod != None:
      lst.append(nod)
      nod = nod.parinte
    lst.reverse()

    return lst
  
  def vizitat(self):
    nod = self.parinte

    while nod != None:
      if nod.informatie == self.informatie:
        return True
      nod = nod.parinte
      
    return False

  def __repr__(self):
    return "{} ({})".format(self.informatie, " -> ".join(str(e) for e in self.drumRadacina()))
  
  def __str__(self):
    return "{}".format(self.informatie)


class Graf:
  def __init__(self, listaAdj, start, scopuri): 
    self.listaAdj = listaAdj
    self.start = start
    self.scopuri = scopuri

  def scop(self, informatieNod):
    return informatieNod in [scop.informatie for scop in self.scopuri]
  
  def succesori(self, nod):
    listaSuccesori = []
    
    for vecin in self.listaAdj[nod]:
      nodNou = Nod(vecin.informatie, nod)
      if not nodNou.vizitat():
        listaSuccesori.append(nodNou)
    
    return listaSuccesori

n0 = Nod(0)
n1 = Nod(1, n0)
n3 = Nod(3, n0)
n4 = Nod(4, n0)
n2 = Nod(2, n1)
n5 = Nod(5, n1)
n6 = Nod(6, n3)
n7 = Nod(7, n4)
n8 = Nod(8, n7)
n9 = Nod(9, n7)

graf = Graf({n0: [n1, n3, n4], n1: [n0, n2, n5], n2: [n1, n5, n7], n3: [n0, n6], n4: [n0, n7], n5: [n1, n2], n6: [n3], n7: [n4, n8, n9], n8: [n7], n9: [n7]}, n0, [n5, n9])

def bfs(graf, nrsol):
  start = graf.start
  q = deque()
  q.append(start)
  nr = 0

  while q:
    node = q.popleft()

    if graf.scop(node.informatie):
      print(node.drumRadacina())
      nr += 1
      if nr == nrsol:
        return 
    else:
      for vecin in graf.succesori(node):
        if not vecin.vizitat():
          q.append(vecin)

bfs(graf, 1)