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
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
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