import java.util.*; public class Graph { HashMap, List>> graph; /** * Costruttore * */ public Graph() { graph = new HashMap, List>>(); } /** * Restituisce una collezione contenente i nodi del grafo * */ public Collection> getNodes() { return graph.keySet(); } /** * Restituisce una collezione contenente gli archi uscenti dal nodo dato * */ public Collection> getOutEdges(Node source) { return graph.get(source); } /** * Aggiunge un nuovo nodo al grafo * */ public void insertNode(Node v) { if (! graph.containsKey(v)) graph.put(v, new LinkedList>()); } /** * Aggiunge un nuovo arco (pesato) al grafo tra il nodo source e il nodo destination, di peso weight * */ public void insertEdge(Node source, Node destination, Integer weight) throws RuntimeException { if (! (graph.containsKey(source) && graph.containsKey(destination)) ) throw new RuntimeException("Nodo non presente nel grafo"); graph.get(source).add(new Edge(destination, weight)); } /** * Aggiunge un nuovo arco (non pesato, ovvero di peso 1) al grafo tra il nodo source e il nodo destination * */ public void insertEdge(Node source, Node destination) throws RuntimeException { if (! (graph.containsKey(source) && graph.containsKey(destination)) ) throw new RuntimeException("Nodo non presente nel grafo"); graph.get(source).add(new Edge(destination, 1)); } }