Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Nod:
- def __init__(self, numarStare, parinte, eveniment, indiceEveniment, sala):
- self.numarStare=numarStare
- self.parinte=parinte
- self.eveniment=eveniment
- self.indiceEveniment=indiceEveniment
- self.sala=sala
- if self.sala!=None and self.eveniment!=None:
- self.locuriNefolosite=self.sala.locuri-self.eveniment.participanti
- def potPlanifica(self, eveniment, sala):
- if eveniment.tip!=sala.tip or eveniment.participanti>sala.locuri:
- return False
- nodCurent=self
- while nodCurent.parinte!=None:
- if sala==nodCurent.sala and eveniment.interval.suprapuneCu(nodCurent.eveniment.interval):
- return False
- nodCurent=nodCurent.parinte
- return True
- class Sala:
- def __init__(self, numar, locuri, tip):
- self.numar=numar
- self.locuri=locuri
- self.tip=tip
- class Interval:
- def __init__(self, oraInceput, minuteInceput, oraSfarsit, minuteSfarsit):
- self.oraInceput=oraInceput
- self.minuteInceput=minuteInceput
- self.oraSfarsit=oraSfarsit
- self.minuteSfarsit=minuteSfarsit
- def suprapuneCu(self, interval):
- m1=self.oraInceput*60+self.minuteInceput
- m2=self.oraSfarsit*60+self.minuteSfarsit
- m3=interval.oraInceput*60+interval.minuteInceput
- if m1<=m3 and m3<=m2:
- return True
- return False
- class Eveniment:
- def __init__(self, interval, participanti, tip):
- self.interval=interval
- self.participanti=participanti
- self.tip=tip
- def initializareDate():
- sali=[]
- sali.append(Sala(1, 21, "Videoconferinta"))
- sali.append(Sala(2, 34, "Videoconferinta"))
- sali.append(Sala(3, 15, "Videoconferinta"))
- sali.append(Sala(4, 50, "Scena"))
- sali.append(Sala(5, 24, "Scena"))
- sali.append(Sala(6, 35, "Scena"))
- sali.append(Sala(7, 14, "Masa rotunda"))
- sali.append(Sala(8, 25, "Masa rotunda"))
- sali.append(Sala(9, 18, "Masa rotunda"))
- sali.append(Sala(10, 24, "Videoconferinta"))
- evenimente=[]
- evenimente.append(Eveniment(Interval(12,40,13,20), 24, "Videoconferinta"))
- evenimente.append(Eveniment(Interval(12,40,13,20), 15, "Videoconferinta"))
- evenimente.append(Eveniment(Interval(14,40,15,20), 20, "Masa rotunda"))
- evenimente.append(Eveniment(Interval(12,40,13,20), 15, "Masa rotunda"))
- evenimente.append(Eveniment(Interval(9,50,11,40), 18, "Videoconferinta"))
- evenimente.append(Eveniment(Interval(8,40,9,40), 8, "Videoconferinta"))
- evenimente.append(Eveniment(Interval(12,40,13,20), 30, "Videoconferinta"))
- evenimente.append(Eveniment(Interval(8,40,9,40), 11, "Masa rotunda"))
- evenimente.append(Eveniment(Interval(12,40,13,20), 25, "Masa rotunda"))
- evenimente.append(Eveniment(Interval(12,40,13,20), 40, "Scena"))
- evenimente.append(Eveniment(Interval(9,40,10,20), 15, "Scena"))
- evenimente.append(Eveniment(Interval(10,40,13,20), 20, "Scena"))
- evenimente.append(Eveniment(Interval(14,20,14,50), 15, "Masa rotunda"))
- evenimente.append(Eveniment(Interval(9,40,10,20), 17, "Masa rotunda"))
- evenimente.append(Eveniment(Interval(12,40,13,20), 34, "Scena"))
- evenimente.append(Eveniment(Interval(10,40,12,30), 27, "Scena"))
- evenimente.append(Eveniment(Interval(10,40,12,30), 27, "Videoconferinta"))
- return sali, evenimente
- def adaugareFrontiera(nod, frontiera):
- if len(frontiera)==0:
- frontiera.insert(0,nod)
- else:
- for i in range(0,len(frontiera)):
- if nod.indiceEveniment>frontiera[i].indiceEveniment or nod.locuriNefolosite<frontiera[i].locuriNefolosite:
- frontiera.insert(i,nod)
- break
- def gasitSolutie(nod, numarEvenimente):
- return nod.indiceEveniment==numarEvenimente
- def afisareSolutie(nod):
- nodCurent=nod
- while nodCurent.parinte!=None:
- print ("Evenimentul {} va avea loc in sala {}.".format(nodCurent.indiceEveniment+1, nodCurent.sala.numar))
- nodCurent=nodCurent.parinte
- def Cautare():
- frontiera=[]
- teritoriu=[]
- sali, evenimente=initializareDate()
- frontiera.append(Nod(1, None, None, -1, None))
- while True:
- if len(frontiera)==0:
- print("Insucces")
- return 0
- nodCurent=frontiera.pop(0)
- if gasitSolutie(nodCurent,len(evenimente)-1):
- print("Succes")
- afisareSolutie(nodCurent)
- return 1
- teritoriu.append(nodCurent)
- evenimentCurent=evenimente[nodCurent.indiceEveniment+1]
- for sala in sali:
- if nodCurent.potPlanifica(evenimentCurent,sala):
- nod=Nod(len(frontiera)+len(teritoriu)+1,nodCurent,evenimentCurent,nodCurent.indiceEveniment+1,sala)
- adaugareFrontiera(nod, frontiera)
- Cautare()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement