Java 我可以在此递归DFS中插入随机起始索引吗?
这是家庭作业,但问题不是。除此之外,我需要从第一个元素开始对预定的图形执行DFS。我的递归DFT方法就是这样做的。 我只是想弄清楚如何修改算法,从最后一个索引开始,或者从中间一个索引开始。我想不通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[
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,直到它小于零。如果你只想从末尾开始,然后倒转过来,这很好,但是如果你想得到更复杂的排序,你最好重新排序你的顶点。你的图形是定向的吗?如果是,如果你想从另一端开始,你可能找不到整棵树。如果它是定向的,那么如果你不从根开始,就有可能无法遍历整棵树……那么你到底想做什么呢?