private void Builder(int layer, List <DAG.Node> previousLayer, List <DAG.Arc> usedArcs, int height) { if (height == 0) { return; } List <DAG.Node> nextLayer = new List <DAG.Node>(); List <DAG.Arc> layerArcs = new List <DAG.Arc>(); foreach (var node in previousLayer) { int mappedIndex = GetOriginalVertexIndex(node.vertexIndex); int[] connected = GetConnected(mappedIndex); Array.Sort(connected); foreach (var connectedVertex in connected) { AddNode( layer, node, connectedVertex, layerArcs, usedArcs, nextLayer); } } usedArcs.AddRange(layerArcs); if (!nextLayer.Any()) { return; } else { dag.AddLayer(nextLayer); Builder(layer + 1, nextLayer, usedArcs, height - 1); } }