Пример #1
0
def buscaUniforme(aspirador, estadoInicial, objetivo=None):
    global mapa
    if (aspirador):
        mapa = obterMapa("aspiradorCustos.txt")
    else:
        mapa = obterMapa("mapaCustos.txt")

    global passo_a_passo
    passo_a_passo = ""

    borda = [No(estadoInicial, None, 0)]
    explorados = []

    i = 0

    while True:
        if not borda:
            return 'Falha'
        borda.sort(key=lambda No: No.caminho)

        no = borda.pop(0)
        explorados.append(no)

        if aspirador:
            if no.estado == "DLL" or no.estado == "ELL":
                return solucao(no, estadoInicial)
        else:
            if no.estado == objetivo:
                return solucao(no, estadoInicial)

        filhos = expansao(no)

        for filho in filhos:
            ## Se filho esta na borda e seu caminho e maior do que o que queremos inserir, substitua ele
            if inLista(filho, borda):
                for x in range(len(borda)):
                    if borda[x].estado == filho.estado:
                        if borda[x].custo > filho.custo:
                            borda[x].pai = filho.pai
                            borda[x].caminho = filho.caminho
            if not (inLista(filho, borda) or inLista(filho, explorados)):
                borda.append(filho)
        i += 1
Пример #2
0
def buscaUniforme(estadoInicial):
    global mapa

    mapa = obterMapa("cidades.txt")

    objetivo = descobre_menor_custo(mapa, estadoInicial)

    global passo_a_passo
    passo_a_passo = ""

    borda = [No(estadoInicial, No(), 0)]
    explorados = []

    i = 0

    while True:
        if not borda:
            return 'Falha', 0, []
        borda.sort(key=lambda No: No.caminho)

        print('[', end=" ")
        for x in borda:
            print(x.estado, end=" ")
        print(']')

        if (borda[0].estado == objetivo and len(no.caminho2) < 9):
            borda[0].caminho += 1000
            continue

        no = borda.pop(0)

        explorados.append(no)

        if (no.estado == objetivo and len(no.caminho2) == 9):
            print(no.caminho)
            return solucao(no, estadoInicial), no.caminho, no.caminho2

        filhos = expansao(no)

        for filho in filhos:
            ## Se filho esta na borda e seu caminho e maior do que o que queremos inserir, substitua ele
            if inLista(filho, borda):
                for x in range(len(borda)):
                    if borda[x].estado == filho.estado:
                        if borda[x].custo > filho.custo:
                            borda[x].pai = filho.pai
                            borda[x].caminho = filho.caminho
            if (filho.estado not in no.caminho2):
                borda.append(filho)
        i += 1
Пример #3
0
from funcoes import obterMapa, fazerNos
from no import No

mapa = fazerNos(obterMapa("mapa.txt"))


def busca_largura(estado_inicial, objetivo):

    borda = [No(estado_inicial)]

    while True:
        if not borda:
            return 'Falha'
        no = borda.pop(0)

        if no.estado == objetivo:
            return solucao(no, estado_inicial)[::-1]

        for filho in expansao(no):
            borda.append(filho)


def solucao(No, noInicio):
    caminho = []
    while No.estado != noInicio:
        caminho.append(No.estado)
        No = No.pai
    caminho.append(No.estado)
    return caminho