Download as pdf or txt
Download as pdf or txt
You are on page 1of 2

def H1(self):

inicio = time.time()
node = self.matrix
Mfinal = Matrix(3,3)
Mfinal.buildMatrix(self.final_state)
final = Mfinal.getMatrix()
queue = PriorityQueue()
queue.put(node)
visitedNodes = []
n = 1

while(not node.isEqual(final) and not queue.empty()):


node = queue.get()
visitedNodes.append(node)
moves = []
childNodes = node.getPossibleNodes(moves)
for i in range(len(childNodes)):
if not
self.existsIn(childNodes[i].getMatrix(),visitedNodes):
childNodes[i].move = moves[i]
childNodes[i].manhattanDist()
childNodes[i].setPrevious(node)
queue._put(childNodes[i])
n += 1
moves = []
self.cost = n
if(node.isEqual(final)):
moves.append(node.move)
nd = node.previous
while nd != None:
if nd.move != '':
moves.append(nd.move)
nd = nd.previous
fin = time.time()
self.lastSolveTime = fin-inicio
print("H1\n")
print("Tiempo de solucion {temp: .5f}:".format(temp = fin-inicio))
print("Nodos recorridos :",n,"\n")
return moves[::-1]

def H2(self):

inicio = time.time()
node = self.matrix
Mfinal = Matrix(3,3)
Mfinal.buildMatrix(self.final_state) #1,2,3,4,5,6,7,8,0
final = Mfinal.getMatrix()
queue = PriorityQueue()
queue.put(node)
visitedNodes = []
indexSelected = 0
n = 1
while (not node.isEqual(final) and not queue.empty()):
node = queue.get()
visitedNodes.append(node)
moves = []
childNodes = node.getPossibleNodes(moves)
for i in range(len(childNodes)):
if not self.existsIn(childNodes[i].getMatrix(),
visitedNodes):
childNodes[i].move = moves[i]
childNodes[i].manhattanDist()
childNodes[i].setPrevious(node)

childNodes[i].cost = node.cost +
node.manhattanDistCost(childNodes[i])
childNodes[i].dist += childNodes[i].cost
queue._put(childNodes[i])
n += 1
auxCost = 0

moves = []
self.cost = n
if(node.isEqual(final)):
moves.append(node.move)
nd = node.previous
while nd != None:
if nd.move != '':
moves.append(nd.move)
nd = nd.previous

fin = time.time()
self.lastSolveTime = fin-inicio
print("## H2 ##\n")
print("Tiempo de solucion {temp: .5f}:".format(temp = fin-inicio))
print("Nodos recorridos:",n,"\n")

return moves[::-1]

You might also like