Advertisement
tiberiup

Untitled

Dec 4th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.91 KB | None | 0 0
  1. import copy
  2.  
  3. class Nod:
  4. def __init__(self, nrStare, stare):
  5. self.nrStare=nrStare
  6. self.stare=stare
  7.  
  8. def totalObiective(self):
  9. total=0
  10. for oras in self.stare:
  11. total+=cautareOrasNumar(oras).obiective
  12. return total
  13.  
  14. def estimareObiective(self):
  15. estimare=0
  16. numar=0
  17. for vecin in cautareOrasNumar(self.stare[-1]).vecini:
  18. numar+=1
  19. if vecin not in self.stare:
  20. estimare+=cautareOrasNumar(vecin).obiective
  21.  
  22. if numar>0:
  23. return estimare/numar
  24. else:
  25. return 0
  26.  
  27. class Oras:
  28. def __init__(self, numar, obiective, vecini):
  29. self.numar=numar
  30. self.obiective=obiective
  31. self.vecini=vecini
  32.  
  33. def construireGraf():
  34. orase=[]
  35. """ orase.append(Oras(1,0,[2,4,9]))
  36. orase.append(Oras(2,1,[1,3,9]))
  37. orase.append(Oras(3,2,[2,4,7]))
  38. orase.append(Oras(4,6,[1,3,5]))
  39. orase.append(Oras(5,1,[4,6]))
  40. orase.append(Oras(6,2,[5,7]))
  41. orase.append(Oras(7,5,[3,6,8]))
  42. orase.append(Oras(8,3,[7,9,11]))
  43. orase.append(Oras(9,4,[1,2,10]))
  44. orase.append(Oras(10,1,[9,11]))
  45. orase.append(Oras(11,2,[7,8,10])) """
  46. orase.append(Oras(1,0,[2,4,9,12,27]))
  47. orase.append(Oras(2,1,[1,3,9]))
  48. orase.append(Oras(3,2,[2,4,7]))
  49. orase.append(Oras(4,6,[1,3,5,27]))
  50. orase.append(Oras(5,1,[4,6,13,27]))
  51. orase.append(Oras(6,2,[5,7,15]))
  52. orase.append(Oras(7,5,[3,6,8,19]))
  53. orase.append(Oras(8,3,[7,9,11]))
  54. orase.append(Oras(9,4,[1,2,10,26]))
  55. orase.append(Oras(10,1,[9,11]))
  56. orase.append(Oras(11,2,[7,8,10,19,20]))
  57. orase.append(Oras(12,1,[1,27]))
  58. orase.append(Oras(13,4,[5,14,15]))
  59. orase.append(Oras(14,1,[13,16]))
  60. orase.append(Oras(15,3,[6,13,16]))
  61. orase.append(Oras(16,2,[14,15,17]))
  62. orase.append(Oras(17,3,[16,18,19]))
  63. orase.append(Oras(18,2,[17,19]))
  64. orase.append(Oras(19,4,[7,11,17,18,20]))
  65. orase.append(Oras(20,5,[11,19,21,22]))
  66. orase.append(Oras(21,3,[20,23]))
  67. orase.append(Oras(22,3,[20,23,24]))
  68. orase.append(Oras(23,6,[22,24]))
  69. orase.append(Oras(24,2,[22,23,25]))
  70. orase.append(Oras(25,1,[24,26]))
  71. orase.append(Oras(26,4,[9,25]))
  72. orase.append(Oras(27,2,[1,4,5,12]))
  73. return orase
  74.  
  75. def gasitSolutie(nod):
  76. return (len(nod.stare)>1 and nod.stare[0]==nod.stare[-1]
  77. and orasObligatoriu in nod.stare and nod.totalObiective()>=minimObiective)
  78.  
  79. def cautareOrasNumar(numarOras):
  80. for oras in orase:
  81. if oras.numar==numarOras:
  82. return oras
  83.  
  84. def adaugareFrontiera(nod):
  85. global frontiera
  86. # obiectiveNod=nod.totalObiective()
  87. obiectiveNod=nod.totalObiective()+nod.estimareObiective()
  88.  
  89. if len(frontiera)==0:
  90. frontiera.insert(0,nod)
  91. else:
  92. for i in range(0,len(frontiera)):
  93. # if obiectiveNod>frontiera[i].totalObiective():
  94. if obiectiveNod>frontiera[i].totalObiective()+frontiera[i].estimareObiective():
  95. frontiera.insert(i,nod)
  96. break
  97.  
  98. def afisareSolutie(nod):
  99. print(nod.nrStare, nod.stare,nod.totalObiective())
  100.  
  101.  
  102. frontiera=[]
  103. teritoriu=[]
  104.  
  105. orase=construireGraf()
  106. orasObligatoriu=14
  107. minimObiective=30
  108.  
  109. si=[1]
  110. frontiera.append(Nod(1,si))
  111.  
  112. while True:
  113. if len(frontiera)==0:
  114. print("Insucces")
  115. break
  116.  
  117. nodCurent=frontiera.pop(0)
  118.  
  119. if gasitSolutie(nodCurent):
  120. print("Succes")
  121. afisareSolutie(nodCurent)
  122. break
  123.  
  124. teritoriu.append(nodCurent)
  125. orasCurent=cautareOrasNumar(nodCurent.stare[-1])
  126.  
  127. for vecin in orasCurent.vecini:
  128. if vecin not in nodCurent.stare[1:]:
  129. stareSuccesor=copy.deepcopy(nodCurent.stare)
  130. stareSuccesor.append(vecin)
  131. succesor=Nod(len(frontiera)+len(teritoriu)+1,stareSuccesor)
  132. adaugareFrontiera(succesor)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement