Question: import java.util. * ; / / Name: Yerim Cho / * * We will use an Integer type to represent each node's ID . *
import java.util.;
Name: Yerim Cho
We will use an Integer type to represent each node's ID
public class HW implements Connectable
HashMap nodes;
int numEdge ;
public HW
nodes new HashMap;
@Override
public Set nodeSet return the set of nodes
if nodessize if the graph is empty. no nodes to return.
Set set new HashSet; just return the empty set.
return set;
return nodes.keySet;
@Override
public Set getNeighborsint node return the set of neighbors connected to 'node'
if nodescontainsKeynode
return nodes.getnodekeySet;
throw new NoSuchElementExceptionThere is no such node.";
@Override
public Iterator breadthFirstIteratorint src return the iterator on nodes in a breadthfirst manner
ArrayList result new ArrayList;
if nodessize return result.iterator;
Iterator itr nodeSetiterator;
Stack visited new Stack;
Queue q new LinkedList;
qaddnodeSetiteratornext;
itr nodeSetiterator;
while qisEmpty
int element qpoll;
visited.pushelement;
result.addelement;
Iterator neighbor getNeighborselementiterator;
while getNeighborselement null
while neighborhasNext
int neigh neighbor.next;
if visited.containsneigh
visited.pushneigh;
result.addneigh;
return result.iterator;
@Override
public Iterator depthFirstIteratorint src same as above in a depthfirst manner stack
ArrayList result new ArrayList;
if nodessize return result.iterator;
Iterator itr nodeSetiterator;
Stack visited new Stack;
Stack s new Stack;
itr nodeSetiterator;
spushitrnext;
while sempty
int element spop;
visited.pushelement;
result.addelement;
Iterator neighbor getNeighborselementiterator;
while neighborhasNext
int neigh neighbor.next;
if visited.containsneigh
visited.pushneigh;
result.addneigh;
return result.iterator;
@Override
public void addNodeint node add a new vertex into the current graph.
if nodes.containsKeynode
HashMap neighbor new HashMap;
neighbor.putnode; make the node. the weight is zero since the node is linked with itself.
nodes.putnode neighbor;
return;
@Override
public boolean addEdgeint source, int target, double w add a new edge. also add nonexisting nodes. return false if edge already exists.
if isEdgesource target return false;
check whether the source vertex exits in the HashMap nodes.
else
numEdge;
Iterator nodeSet nodeSetiterator;
boolean exist false;
while nodeSethasNext
if source nodeSet.next
exist true;
break;
if exist false addNodesource;
nodeSet nodeSetiterator;
exist false;
while nodeSethasNext
if target nodeSet.next
exist true;
break;
if exist false addNodetarget;
HashMap neighbor nodes.getsource;
neighbor.puttarget w;
nodes.putsource neighbor;
neighbor nodes.gettarget;
neighbor.putsource w;
nodes.puttarget neighbor;
return true;
@Override
public boolean removeNodeint node remove node. return false if node doesn't exist.
boolean exist false;
Iterator nodeSet nodeSetiterator;
while nodeSethasNext
if node nodeSet.next
exist true;
nodes.removenode;
break;
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
