在下面的代码中我收到一条错误“在带有顶点和边以及有效起始顶点的图上调用dft时,不应该抛出异常。”
如果图表为空,则抛出EmptyCollectionException
`当图中不存在起始节点时,抛出NoSuchElementException。
如果起始节点没有边缘,则抛出NoEdgeException
。
据我所知,我正在做正确的事情。getNumVertices/getNumEdges
获取图中顶点/边的数量。有一个isEmpty
方法,我试过,但我得到了相同的结果。
有什么我想念的吗?可能很简单。我好像在看简单的东西。
public ArrayList<GraphNode> dft(GraphNode start)
throws EmptyCollectionException, NoSuchElementException,
NoEdgeExistsException {
if (getNumVertices() == 0) {
throw new EmptyCollectionException("The graph is empty!");
}
if (!vertices.contains(start)) {
throw new NoSuchElementException(start);
}
if (getNumEdges() == 0) {
throw new NoEdgeExistsException();
}
boolean[] visited = new boolean[vertices.size()];
ArrayList<GraphNode> resultsList = new ArrayList<>();
dftHelp(start, visited, resultsList);
return resultsList;
private void dftHelp(GraphNode n, boolean[] visit,
ArrayList<GraphNode> results) throws NoSuchElementException,
EmptyCollectionException, NoEdgeExistsException {
int idx = vertices.indexOf(n);
visit[idx] = true;
results.add(n);
LinkedList<GraphNode> resultsList;
resultsList = this.getEdgesOfVertex(n);
for (GraphNode node: resultsList) {
int newIdx = vertices.indexOf(node);
if (!visit[newIdx]) {
dftHelp(node, visit, results);
}
}