import java.util.*; class Vertex { String name; LinkedList inList ; LinkedList outList; public Vertex(String s) { name = s; inList = new LinkedList(); outList = new LinkedList(); } } class Edge { Vertex vert; public Edge(Vertex v) { vert = v; } } public class Graph { Hashtable h; public Graph() { h = new Hashtable(); } public void addVertex(String s) { Vertex v = new Vertex(s); h.put(s,v); } public void addEdge(String s1, String s2) { Vertex u = h.get(s1); Vertex v = h.get(s2); if ( (u != null) && (v !=null) ) { u.outList.add(new Edge(v)); v.inList.add(new Edge(u)); } } public void printGraph() { Collection vertexList = h.values(); for(Vertex v: vertexList) { System.out.print(v.name + " :"); for(Edge e: v.outList) System.out.print(" " + e.vert.name); System.out.println(" "); } } public static void main(String argv []) { Graph g = new Graph(); g.addVertex("CS1"); g.addVertex("DiscStruct"); g.addVertex("DataStruct"); g.addEdge("CS1","DiscStruct"); g.addEdge("DiscStruct","DataStruct"); g.addEdge("CS1","DataStruct"); g.printGraph(); } }