import java.util.*;
class Graph {
private Map<Integer, ArrayList<Integer>> adjacencyList ;
public Graph(){
adjacencyList = new HashMap<Integer, ArrayList<Integer>>();
}
public void addVertex(int node){
if (adjacencyList.containsKey(node)){
System.out.println("The vertext is already registered.");
return;
}
adjacencyList.put(node, null);
}
public void addEdge(int node, int edge){
if (!adjacencyList.containsKey(node)){
System.out.println("The vertex does not exist");
return;
}
ArrayList<Integer> edgesList= adjacencyList.get(node);
if (edgesList== null){
edgesList = new ArrayList<Integer>();
adjacencyList.put(node, edgesList);
}
if (!containsEdge(edgesList, edge)){
edgesList.add(edge);
}
ArrayList<Integer> transitiveEdgesList= adjacencyList.get(edge);
if (transitiveEdgesList== null){
transitiveEdgesList = new ArrayList<Integer>();
adjacencyList.put(edge, transitiveEdgesList);
}
if (!containsEdge(transitiveEdgesList, node)){
transitiveEdgesList.add(node);
}
}
public boolean containsEdge(ArrayList<Integer> edgesList, int edgeToCheck){
for (Integer currentEdge: edgesList){
if (currentEdge == edgeToCheck){
return true;
}
}
return false;
}
public void showConnections(){
Set<Map.Entry<Integer, ArrayList<Integer>>> vertexEdges = adjacencyList.entrySet();
for (Map.Entry<Integer, ArrayList<Integer>> entry : vertexEdges){
ArrayList<Integer> edges = entry.getValue();
String connections = "";
for (int i=0; i < edges.size(); i++){
connections+= " "+ edges.get(i);
}
System.out.println("Node: "+ entry.getKey()+"-->"+ connections);
}
}
}
class Main {
public static void main(String[] args) {
Graph myGraph = new Graph();
myGraph.addVertex(0);
myGraph.addVertex(1);
myGraph.addVertex(2);
myGraph.addVertex(3);
myGraph.addVertex(4);
myGraph.addVertex(5);
myGraph.addVertex(6);
myGraph.addEdge(3,1);
myGraph.addEdge(3,4);
myGraph.addEdge(4,2);
myGraph.addEdge(4,5);
myGraph.addEdge(1,2);
myGraph.addEdge(1,0);
myGraph.addEdge(0,2);
myGraph.addEdge(6,5);
myGraph.showConnections();
}
}