Java 拓扑排序与DFS的不同之处在于,当前元素的处理是在递归调用之后完成的吗
拓扑排序与DFS的不同之处在于Java 拓扑排序与DFS的不同之处在于,当前元素的处理是在递归调用之后完成的吗,java,recursion,graph,depth-first-search,topological-sort,Java,Recursion,Graph,Depth First Search,Topological Sort,拓扑排序与DFS的不同之处在于 在TopLogic排序的情况下,处理(添加到输出 当前元素的堆栈)在递归调用后完成,而 如果是DFS,则处理当前元素(即打印或打印) 是否在递归调用之前添加到输出队列 这是我的DFS代码 public void depthfirstsearchrecursive() { for(int i = 0;i<vertices.size();i++) { if(vertices.get(i).isV
- 在TopLogic排序的情况下,处理(添加到输出 当前元素的堆栈)在递归调用后完成,而
- 如果是DFS,则处理当前元素(即打印或打印) 是否在递归调用之前添加到输出队列
public void depthfirstsearchrecursive()
{
for(int i = 0;i<vertices.size();i++)
{
if(vertices.get(i).isVisited == false)
{
vertices.get(i).isVisited = true;
System.out.println(vertices.get(i).name + " ");
depthfirstsearchrecursiveUtil(vertices.get(i));
}
}
}
public void depthfirstsearchrecursiveUtil(Vertex v)
{
for(int i = 0;i<v.neighbors.size();i++)
{
if(v.neighbors.get(i).isVisited == false)
{
v.neighbors.get(i).isVisited = true;
System.out.println(v.neighbors.get(i).name + " ");
depthfirstsearchrecursiveUtil(v.neighbors.get(i));
}
}
}
public void depthfirstsearchrecursive()
{
for(int i=0;i不完全正确。DFS是通用形式。您可以使用它来实现订单前和/或订单后评估
拓扑排序需要后评估DFS
考虑以下代码:
void DFS(Vertex v) {
if (v.hasVisited)
return;
v.hasVisited = true;
doBeforeDepth(v)
for (Vertex u : v.neighbours)
DFS(u);
doAfterDepth(v);
}
void DFS()
{
for (Vertex v : vertices)
DFS(v);
}
可以使用此DFS代码执行拓扑排序
void DFS(Vertex v) {
if (v.hasVisited)
return;
v.hasVisited = true;
doBeforeDepth(v)
for (Vertex u : v.neighbours)
DFS(u);
doAfterDepth(v);
}
void DFS()
{
for (Vertex v : vertices)
DFS(v);
}