示例#1
0
def main():

    argc = len(sys.argv)

    if sys.argv[1] == '-s' and argc == 3:
        estado = sys.argv[2]
        suc = sucessor(estado)
        str = ''
        for i in suc:
            str += '('
            i = ','.join(i)
            str += i
            str += ') '
        str.rstrip()
        print(str)

    elif sys.argv[1] == '-e' and argc == 4:
        ini_state = sys.argv[2]
        ini_cost = sys.argv[3]
        ini_node = Node(estado=ini_state, custo=ini_cost)
        new_node = expande(ini_node)
        print(*new_node)
    elif sys.argv[1] == '-r' and argc == 4:
        ini_state = sys.argv[3]
        ini_node = Node(estado=ini_state)
        if sys.argv[2] == '-bfs':
            print(*bfs(ini_node))
        elif sys.argv[2] == '-dfs':
            print(*dfs(ini_node))
        elif sys.argv[2] == '-as1':
            print(*astarHamming(ini_node))
        elif sys.argv[2] == '-as2':
            print(*astarManhattan(ini_node))
示例#2
0
def dfs(nodo):
    num_exp = 0
    explorados = []
    fronteira = [nodo]
    while True:
        if not fronteira:
            return []

        actual = fronteira.pop()
        if actual.estado == '12345678_':
            print(num_exp, actual.custo)
            return backtrace(actual)

        if actual.estado not in explorados:
            explorados.append(actual.estado)
            for item in expande(actual):
                num_exp += 1
                item.custo = actual.custo + 1
                fronteira.append(item)
示例#3
0
def astarManhattan(nodo):
    num_exp = 0
    explorados = []
    fronteira = PriorityQueue()
    initial = PriorityNode(manhattan(nodo), nodo)
    fronteira.put(initial)
    while True:
        if not fronteira:
            return []

        actual = fronteira.get()
        actual = actual.item
        if actual.estado == '12345678_':
            print(num_exp, actual.custo)
            return backtrace(actual)

        if actual.estado not in explorados:
            explorados.append(actual.estado)
            for item in expande(actual):
                num_exp += 1
                item.custo = actual.custo + 1
                priority = manhattan(item) + item.custo
                new_item = PriorityNode(priority, item)
                fronteira.put(new_item)