Design a set of classes for a graph data structure that meets the following requirements:
One should be able to associate any type of data item with vertices.
One should be able to associate any type of data item with edges.
The graph must have, at a minimum, the operations of:
- Create a new graph with N nodes
- Add an edge to the graph.
- Delete an edge from the graph.
- Determine if there is a path between two given nodes.
- Retrieve the item associated with a given edge.
- Retrieve the item associated with a given vertex.
You may de?ne any number of classes that you wish. Give the java code for all class de?nitions, including instance variables, method headers, javadoc comments for method headers, but not method bodies (implementations). Don't forget to document any exceptions that a method might throw.