package buffalo.transportNetwork; /** Exemple d'implémentation de l'interface <CODE>FlowableArc</CODE>, représente une arête du réseau de transport. */ public class Arc implements FlowableArc { /*-------------------------------------------------*/ /** Capacité minimale de l'arc, ie. borne inférieure pour le flot. */ private double minCapacity; /** Capacité maximale de l'arc, ie. borne supérieure pour le flot. */ private double maxCapacity; /** Valeur du flot circulant dans l'arc... */ private double flowValue; /** Sommet dont l'arête courante "part". */ private Vertex inVertex; /** Sommet dans lequel l'arête courante "arrive". */ private Vertex outVertex; /*-------------------------------------------------*/ /** Une arête se construit à partir de deux sommets, une borne inférieure et une borne supérieure. Ce constructeur se charge aussi d'invoquer les <CODE>add**Arc(this)</CODE>. */ public Arc(Vertex inVertex, Vertex outVertex, double minCapacity, double maxCapacity) { this.inVertex=inVertex; this.outVertex=outVertex; this.minCapacity=minCapacity; this.maxCapacity=maxCapacity; this.inVertex.addOutArc(this); this.outVertex.addInArc(this); } /*-------------------------------------------------*/ /** Retourne la borne inférieure de la capacité de l'arc. */ public double getMinCapacity() { return minCapacity; } /*-------------------------------------------------*/ /** Retourne la borne supérieure de la capacité de l'arc. */ public double getMaxCapacity() { return maxCapacity; } /*-------------------------------------------------*/ /** Retourne la valeur du flot. */ public double getFlowValue() { return flowValue; } /*-------------------------------------------------*/ /** Pour augmenter le flot dans le sens conforme. */ public void increaseConformFlow(double increment) { flowValue += increment; } /*-------------------------------------------------*/ /** Pour augmenter le flot dans le sens non conforme. */ public void increaseUnconformFlow(double increment) { flowValue = flowValue - increment; } /*-------------------------------------------------*/ /** Retourne la valeur résiduelle de l'arc (si il est pris dans le sens conforme). */ public double getConformResidualValue() { if (maxCapacity != -1) { return (maxCapacity - flowValue); } else { return -1; } } /*-------------------------------------------------*/ /** Retourne la valeur résiduelle de l'arc (si il est pris dans le sens non conforme). */ public double getUnconformResidualValue() { if(minCapacity != -1) { return (flowValue - minCapacity); } else { return -1; } } /*-------------------------------------------------*/ /** Retourne le sommet de "départ" de l'arc. */ public FlowableVertex getInVertex() { return inVertex; } /*-------------------------------------------------*/ /** Retourne le sommet d'"arrivée" de l'arc. */ public FlowableVertex getOutVertex() { return outVertex; } /*-------------------------------------------------*/ /** Retourne l'arête au format chaîne de caractères */ public String toString() { String res = "{ min = "; if (minCapacity > 0) { res += " unbound "; } else { res += minCapacity; } res += " max = "; if (maxCapacity < 0) { res += " unbound "; } else { res += maxCapacity; } res += " flowValue = " + flowValue; res += " outVertex = " + outVertex.getIndex(); res += " } "; return res; } }