// Last edited on 2000-09-01 07:04:03 by stolfi // Funções para otimizar caminhos e fazer busca por distância import java.io.*; import java.util.*; import Nodo; import Grafo; import CriterioDeParada; import CriterioDeParadaPadrao; public class OtimizadorImpl extends Otimizador { private Grafo grafo; // Construtor public OtimizadorImpl(Planta pl) // Constroi um Otimizador para a planta "pl". { grafo = new GrafoImpl(pl); } public final Nodo melhorCaminho(Object a, Object b) { Nodo[] ini = new Nodo[1]; Nodo[] fin = new Nodo[1]; if (a instanceof Trecho) { ini[0] = grafo.trMei[((Trecho)a).id()]; } else if (a instanceof Servico) { ini[0] = grafo.svSai[((Servico)a).id()]; } else { throw new IllegalArgumentException("Origem invalida"); } if (b instanceof Trecho) { fin[0] = grafo.trMei[((Trecho)b).id()]; } else if (b instanceof Servico) { fin[0] = grafo.svEnt[((Servico)b).id()]; } else { throw new IllegalArgumentException("Origem invalida"); } CriterioDeParada cr = new CriterioDeParadaPadrao(fin, 1); Nodo[] cam = grafo.dijkstra(ini, cr); return cam[0]; } public final Nodo[] enumServicos ( Elemento a, TipoDeServico tipo, double cMax, int nDes ) { Nodo[] ini = new Nodo[1]; if (a instanceof Trecho) { ini[0] = grafo.trMei[((Trecho)a).id()]; } else if (a instanceof Servico) { ini[0] = grafo.svSai[((Servico)a).id()]; } else { throw new IllegalArgumentException("Origem invalida"); } CriterioDeParada cr = new CriterioDeParadaPadrao(tipo, cMax, nDes); Nodo[] cam = grafo.dijkstra(ini, cr); return cam; } }