2016-04-29 5 views
0

Bei der ersten Suche in der Tiefe müssen wir, wenn ein Knoten besucht wird, erneut einen seiner benachbarten Knoten nehmen und diesen Prozess für diesen benachbarten Knoten ausführen. Abhängig davon kann es mehrere Tiefensuchaufträge geben. Gibt es eine Möglichkeit, die verschiedenen DFS-Aufträge in einem Diagramm zu zählen, ohne den Algorithmus anzuwenden und manuell zu berechnen? Bitte geben Sie mir die Lösung so schnell wie möglich.Tiefe erste Suchreihenfolge

Antwort

1

Sie können es tun, indem Sie die Knoten auf jeder Ebene zählen und multiplizieren jedes Mal auf die nächste Ebene.

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; 
    }