def obter_ligacoes_ordenadas(self, estado_partida): ligacoes_ordenadas = [] ligacoes = areas_lig_tp.obter_ligacoes() """ Ordenar as ligacoes pelo centro de área """ for centro in ligacoes: criterio_seleccao = lambda prox_ligacao: psa.util.dist(centro, prox_ligacao) ligacoes[centro] = sorted(ligacoes[centro], key=criterio_seleccao) """ Ordenar os centros de área em relação a um centro inicial """ prox_ligacao = estado_partida ligacoes_percorrer = [self.estado_abs(estado_partida)] ligacoes_precorridas = [] while ligacoes_percorrer: ligacoes_locais = [] for ligacao in ligacoes_percorrer: if ligacao not in ligacoes_precorridas: ligacoes_precorridas.append(ligacao) ligacoes_locais.append(ligacao) d = { prox_ligacao : ligacoes_locais} ligacoes_ordenadas.append(d) prox_ligacao = ligacoes_percorrer.pop(0) for ligacao in ligacoes[prox_ligacao]: if ligacao not in ligacoes_precorridas: ligacoes_percorrer.append(ligacao) return ligacoes_ordenadas
def __init__(self): super(CrencasAreas, self).__init__() self.areas = areas_lig_tp.obter_areas() self.ligacoes = areas_lig_tp.obter_ligacoes() self.oper_ligar = Ligar(self)