SHARE
TWEET

Nave - A*

tiberiup Dec 11th, 2018 44 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top