def aaStar(self, gameState, whereLostFood):
        from util import PriorityQueue
        from util import manhattanDistance

        closed = []
        directions = {}
        costs = {}

        priorityQ = PriorityQueue()
        priorityQ.push(gameState, 0)

        startState = gameState.getAgentState(self.index)
        startPosition = startState.getPosition()
        closed.append(startPosition)

        directions[startPosition] = []
        costs[startPosition] = 0

        while not priorityQ.isEmpty():
            cur_State = priorityQ.pop()
            cur_Position = cur_State.getAgentState(self.index).getPosition()
            actions = cur_State.getLegalActions(self.index)

            if cur_Position == whereLostFood:
                return directions[cur_Position]

            for action in actions:
                nextState = self.getSuccessor(cur_State, action)
                nextPosition = nextState.getAgentState(
                    self.index).getPosition()
                Actions = directions[cur_Position][:]
                nextCost = costs[cur_Position] + 1

                if nextPosition not in closed or nextCost < costs[nextPosition]:
                    costs[nextPosition] = nextCost
                    directions[nextPosition] = []
                    Actions.append(action)
                    directions[nextPosition].extend(Actions)
                    closed.append(nextPosition)
                    g = nextCost
                    h = manhattanDistance(nextPosition, whereLostFood)
                    f = g + h
                    priorityQ.push(nextState, f)

        return []