Advertisement
tiberiup

Nave - A*

Dec 11th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 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. self.valoare=self.calculeazaValoare()
  8. self.valoareMaxima=self.valoare+self.calculeazaValoareMaxima()
  9.  
  10. def calculeazaValoare(self):
  11. valoare=50
  12.  
  13. if len(self.stare)>4:
  14. if self.stare[4]==2:
  15. valoare+=4
  16. if len(self.stare)>2:
  17. if self.stare[2]==1:
  18. valoare+=5
  19. for i in range(0,len(self.stare)-1):
  20. if self.stare[i]%2-(self.stare[i+1]%2)==0:
  21. valoare-=8
  22. return valoare
  23.  
  24. def calculeazaValoareMaxima(self):
  25. valoare=0
  26. if 1 not in self.stare and len(self.stare)<3:
  27. valoare+=5
  28. if 2 not in self.stare and len(self.stare)<5:
  29. valoare+=4
  30. return valoare
  31.  
  32. def navaDejaRepartizata(self, nava):
  33. if nava in self.stare:
  34. return True
  35. return False
  36.  
  37. def adaugareFrontiera(nod, frontiera):
  38. if len(frontiera)==0:
  39. frontiera.insert(0,nod)
  40. return 1
  41. else:
  42. for i in range(0,len(frontiera)):
  43. if nod.valoareMaxima>=frontiera[i].valoareMaxima:
  44. frontiera.insert(i,nod)
  45. return 1
  46. frontiera.append(nod)
  47.  
  48. def afisareSolutie(nod):
  49. print ("Repartizarea cea mai buna este (", end="")
  50. for echipaj in nod.stare:
  51. print ("{} ".format(echipaj), end="")
  52. print (") cu valoarea {}.".format(nod.valoare))
  53.  
  54. def Cautare():
  55.  
  56. frontiera=[]
  57. teritoriu=[]
  58. optim=Nod(1,[])
  59. frontiera.append(optim)
  60.  
  61. while len(frontiera)!=0:
  62. nodCurent=frontiera.pop(0)
  63.  
  64. if len(nodCurent.stare)==5:
  65. afisareSolutie(nodCurent)
  66. print ("Au fost expandate {} noduri si evaluate {} noduri.".format(len(teritoriu),len(frontiera)))
  67. return 1
  68.  
  69. teritoriu.append(nodCurent)
  70. for i in range(1,6):
  71. if nodCurent.navaDejaRepartizata(i)==False:
  72. stare=copy.deepcopy(nodCurent.stare)
  73. stare.append(i)
  74. nod=Nod(len(frontiera)+len(teritoriu)+1,stare)
  75. adaugareFrontiera(nod, frontiera)
  76.  
  77.  
  78.  
  79.  
  80.  
  81. Cautare()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement