【发布时间】:2016-04-29 17:15:15
【问题描述】:
在深度优先搜索中,每当访问一个节点时,我们必须再次获取其相邻节点之一,并对该相邻节点执行此过程。根据这个,可能有多个深度优先搜索顺序。那么,有没有办法在不应用算法和手动计算的情况下计算图中不同 DFS 订单的总数?请尽快给我解决方案..
【问题讨论】:
标签: graph
在深度优先搜索中,每当访问一个节点时,我们必须再次获取其相邻节点之一,并对该相邻节点执行此过程。根据这个,可能有多个深度优先搜索顺序。那么,有没有办法在不应用算法和手动计算的情况下计算图中不同 DFS 订单的总数?请尽快给我解决方案..
【问题讨论】:
标签: graph
您可以通过计算每个级别的节点并在每次进入下一个级别时保持相乘来做到这一点。
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;
}
【讨论】: