Java 拓扑排序与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

拓扑排序与DFS的不同之处在于

  • 在TopLogic排序的情况下,处理(添加到输出 当前元素的堆栈)在递归调用后完成,而
  • 如果是DFS,则处理当前元素(即打印或打印) 是否在递归调用之前添加到输出队列
这是我的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);
}