/** * Interface Grafo para grafos NO dirigidos. * @author Cátedra de Estructuras de Datos, Departamento de Cs. e Ing. de la Computación, UNS. */ public interface Graph { /** * Devuelve una colección iterable de vértices. * @return Una colección iterable de vértices. */ public Iterable> vertices(); /** * Devuelve una colección iterable de arcos. * @return Una colección iterable de arcos. */ public Iterable> edges(); /** * Devuelve una colección iterable de arcos incidentes a un vértice v. * @param v Un vértice. * @return Una colección iterable de arcos incidentes a un vértice v. * @throws InvalidVertexException si el vértice es inválido. */ public Iterable> incidentEdges(Vertex v) throws InvalidVertexException; /** * Devuelve el vértice opuesto a un Arco E y un vértice V. * @param v Un vértice * @param e Un arco * @return El vértice opuesto a un Arco E y un vértice V. * @throws InvalidVertexException si el vértice es inválido. * @throws InvalidEdgeException si el arco es inválido. */ public Vertex opposite(Vertex v, Edge e) throws InvalidVertexException, InvalidEdgeException; /** * Devuelve un Arreglo de 2 elementos con lo vértices extremos de un Arco e. * @param e Un arco * @return Un Arreglo de 2 elementos con los extremos de un Arco e. * @throws InvalidEdgeException si el arco es inválido. */ public Vertex [] endvertices(Edge e) throws InvalidEdgeException; /** * Devuelve verdadero si el vértice w es adyacente al vértice v. * @param v Un vértice * @param w Un vértice * @return Verdadero si el vértice w es adyacente al vértice v, falso en caso contrario. * @throws InvalidVertexException si uno de los vértices es inválido. */ public boolean areAdjacent(Vertex v,Vertex w) throws InvalidVertexException; /** * Reemplaza el rótulo de v por un rótulo x. * @param v Un vértice * @param x Rótulo * @return El rótulo anterior del vértice v al reemplazarlo por un rótulo x. * @throws InvalidVertexException si el vértice es inválido. */ public V replace(Vertex v, V x) throws InvalidVertexException; /** * Inserta un nuevo vértice con rótulo x. * @param x rótulo del nuevo vértice * @return Un nuevo vértice insertado. */ public Vertex insertVertex(V x); /** * Inserta un nuevo arco con rótulo e, con vértices extremos v y w. * @param v Un vértice * @param w Un vértice * @param e rótulo del nuevo arco. * @return Un nuevo arco. * @throws InvalidVertexException si uno de los vértices es inválido. */ public Edge insertEdge(Vertex v, Vertex w, E e) throws InvalidVertexException; /** * Remueve un vértice V y retorna su rótulo. * @param v Un vértice * @return rótulo de V. * @throws InvalidVertexException si el vértice es inválido. */ public V removeVertex(Vertex v) throws InvalidVertexException; /** * Remueve un arco e y retorna su rótulo. * @param e Un arco * @return rótulo de E. * @throws InvalidEdgeException si el arco es inválido. */ public E removeEdge(Edge e) throws InvalidEdgeException; }