Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以在此递归DFS中插入随机起始索引吗?_Java_Recursion_Depth First Search - Fatal编程技术网

Java 我可以在此递归DFS中插入随机起始索引吗?

Java 我可以在此递归DFS中插入随机起始索引吗?,java,recursion,depth-first-search,Java,Recursion,Depth First Search,这是家庭作业,但问题不是。除此之外,我需要从第一个元素开始对预定的图形执行DFS。我的递归DFT方法就是这样做的。 我只是想弄清楚如何修改算法,从最后一个索引开始,或者从中间一个索引开始。我想不通 public void recursiveDFT() { for (int i = 0; i < numberOfVertices; i++) { if (!vertex[i].getColor().equals("white")) vertex[

这是家庭作业,但问题不是。除此之外,我需要从第一个元素开始对预定的图形执行DFS。我的递归DFT方法就是这样做的。 我只是想弄清楚如何修改算法,从最后一个索引开始,或者从中间一个索引开始。我想不通

public void recursiveDFT() {
    for (int i = 0; i < numberOfVertices; i++) {
        if (!vertex[i].getColor().equals("white"))
            vertex[i].setColor("white");
        if (pi[i] != null)
            pi[i] = null;
    }
    time = 0;
    for (int i = 0; i < numberOfVertices; i++) {
        if (vertex[i].getColor().equals("white"))
            recursiveDFTVisit(i);
    }
}//recursiveDFT

public void recursiveDFTVisit(int u) {
    vertex[u].setColor("gray");
    time++;
    d[u] = time;
    vertex[u].visit();
    for (int column = 0; column < numberOfVertices; column++) {
        if(edge[u][column] == 1 && vertex[column].getColor().equals("white")) {
            pi[column] = vertex[u];
            recursiveDFTVisit(column);
        }
    }
    vertex[u].setColor("black");
    f[u] = ++time;
}

如果要从不同的点开始,但仍要检查整个树,最好的方法可能是重新排列顶点数组。要从vertex[]的不同部分开始,只需在第一个for循环中更改i的起始值。正如前面提到的,除非重新设计for循环以确保它仍然命中每个节点,否则这可能会阻止您遍历整个树。例如,可以从长度-1开始,然后减小i,直到它小于零。如果你只想从末尾开始,然后倒转过来,这很好,但是如果你想得到更复杂的排序,你最好重新排序你的顶点。

你的图形是定向的吗?如果是,如果你想从另一端开始,你可能找不到整棵树。如果它是定向的,那么如果你不从根开始,就有可能无法遍历整棵树……那么你到底想做什么呢?