// Last edited on 2000-08-30 03:35:20 by stolfi import Grafo; import Nodo; import Trecho; import Ponto; public abstract class NodoTrecho extends Nodo { public Trecho trecho; } public class NodoTrechoInicio extends NodoTrecho // Nodo que representa o inicio de um trecho // Sucessores: meio do mesmo trecho. { public NodoTrechoInicio(Grafo gr, Trecho tr) { this.grafo = gr; this.trecho = tr; } public final void inicializa() { Nodo[] pr = new Nodo[1]; double[] ct = new double[1]; pr[0] = grafo.trMei[trecho.id()]; ct[0] = trecho.pcusto()/2; this.Prox = pr; this.Custo = ct; this.Posicao = trecho.origPos(); } public final String toString() { return "(tr" + trecho.id() + ":i)"; } } public class NodoTrechoMeio extends NodoTrecho // Nodo que representa o meio de um trecho // Sucessores: fim do mesmo trecho, e servicos com entrada no trecho. { public NodoTrechoMeio(Grafo gr, Trecho tr) { this.grafo = gr; this.trecho = tr; } public final void inicializa() { Servico[] s = trecho.entradasDeServicos(); int ns = s.length; Nodo[] pr = new Nodo[ns + 1]; double[] ct = new double[ns + 1]; for (int i = 0; i < ns; i++) { pr[i] = grafo.svEnt[s[i].id()]; ct[i] = Grafo.CUSTO_EPSILON; } pr[ns] = grafo.trFim[trecho.id()]; ct[ns] = trecho.pcusto()/2; this.Prox = pr; this.Custo = ct; Ponto a = trecho.origPos(); Ponto b = trecho.destPos(); this.Posicao = new Ponto((a.x+b.x)/2, (a.y+b.y)/2); } public final String toString() { return "(tr" + trecho.id() + ":m)"; } } public class NodoTrechoFim extends NodoTrecho // Nodo que representa o fim de um trecho // Sucessores: inicios dos trechos com conversao permitida. { public NodoTrechoFim(Grafo gr, Trecho tr) { this.grafo = gr; this.trecho = tr; } public final void inicializa() { Esquina dest = trecho.dest(); Trecho[] ts = dest.saem(); int nt = ts.length; Nodo[] pr = new Nodo[nt]; double[] ct = new double[nt]; for (int i = 0; i < nt; i++) { pr[i] = grafo.trIni[ts[i].id()]; ct[i] = dest.vcusto(trecho,ts[i]); } this.Prox = pr; this.Custo = ct; this.Posicao = trecho.destPos(); } public final String toString() { return "(tr" + trecho.id() + ":f)"; } }