不应该使用Depth First Traversal抛出异常

时间:2017-12-06 04:49:55

标签: java data-structures graph

在下面的代码中我收到一条错误“在带有顶点和边以及有效起始顶点的图上调用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);
        }
    }

0 个答案:

没有答案