package bjc.utils.graph; /** * An edge in a weighted graph * * @author ben * * @param * The type of the nodes in the graph */ public class Edge { /* * The distance from initial to terminal node */ private final int distance; /* * The initial and terminal nodes of this edge */ private final T source, target; /** * Create a new edge with set parameters * * @param initial * The initial node of the edge * @param terminal * The terminal node of the edge * @param distance * The distance between initial and terminal edge */ public Edge(T initial, T terminal, int distance) { if(initial == null) throw new NullPointerException("Initial node must not be null"); else if(terminal == null) throw new NullPointerException("Terminal node must not be null"); this.source = initial; this.target = terminal; this.distance = distance; } @Override public boolean equals(Object obj) { if(this == obj) return true; else if(obj == null) return false; else if(getClass() != obj.getClass()) return false; else { Edge other = (Edge) obj; if(distance != other.distance) return false; else if(source == null) { if(other.source != null) return false; } else if(!source.equals(other.source)) return false; else if(target == null) { if(other.target != null) return false; } else if(!target.equals(other.target)) return false; return true; } } /** * Get the distance in this edge * * @return The distance between the initial and terminal nodes of this * edge */ public int getDistance() { return distance; } /** * Get the initial node of an edge * * @return The initial node of this edge */ public T getSource() { return source; } /** * Get the target node of an edge * * @return The target node of this edge */ public T getTarget() { return target; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + distance; result = prime * result + (source == null ? 0 : source.hashCode()); result = prime * result + (target == null ? 0 : target.hashCode()); return result; } @Override public String toString() { return " first vertex " + source + " to vertex " + target + " with distance: " + distance; } }