2016-04-29 108 views
0

深度优先搜索,无论何时访问节点,我们都必须再次取其相邻节点中的一个,并为该相邻节点执行此过程。根据这个,可能会有多个Depth第一个搜索顺序。那么,是否有任何方法可以在不应用算法和手动计算的情况下统计图中总的不同DFS订单?请尽快给我解决方案..深度优先搜索指令

回答

1

您可以通过计算每个级别的节点并保持每次进入下一级别时相乘。

LinkedList<Node> connections = startNode.connections; 
    long totalOrders = 1L; 
    while(!connections.isEmpty()){ 
     LinkedList<Node> newConnections = new LinkedList<>(); 
     List<Integer> conSizes = new LinkedList()<>; 
     for (Node connection : connections) { 
      if(!connection.visited){      
       connection.visited = true; 
       newConnections.addAll(connection.connections); 
       totalOrders = totalOrders * factorial(connection.connections.size()); 
      } 
     } 
     totalOrders = totalOrders * factorial(connections.size()); 
     connections = newConnections; 

    } 
    System.out.println(totalOrders) 


    public static long factorial(int n) { 
     long fact = 1; // this will be the result 
     for (int i = 1; i <= n; i++) { 
      fact *= i; 
     } 
     return fact; 
    }