package network;

import java.util.Iterator;
import java.util.Set;

public interface Graph<Vertex, Wheight> extends Iterable<Vertex> {
	
	public boolean containsVertex(Vertex vertex);
	
	public boolean addVertex(Vertex vertex);
	
	public boolean removeVertex(Vertex vertex);
	
	public int edgeSize();
	
	public Wheight getEdgeWheight(Vertex v1, Vertex v2);
	
	public boolean containsEdge(Vertex v1, Vertex v2);
	
	public boolean addEdge(Vertex v1, Vertex v2, Double weight);
	
	public boolean removeEdge(Vertex v1, Vertex v2);
	
	public boolean isEmpty();
	
	public int size();
	
	public Set<Vertex> neighbors (Vertex v);
	
	public Iterator<Vertex> iterator();
	
	public Iterator<Vertex> breadthFirstIterator(Vertex v);
	
	public Iterator<Vertex> depthFisrtIterator (Vertex v);
	
}
