Balancing(Graph dag, int[] layering, int[] nodeCount)
 {
     this.nodeCount = nodeCount;
     this.dag       = dag;
     this.layering  = layering;
     Init();
 }
 Balancing(Graph dag, int[] layering, int[]nodeCount) {
     this.nodeCount = nodeCount;
     this.dag = dag;
     this.layering = layering;
     Init();
 }
 /// <summary>
 /// balances the layers by moving vertices with
 /// the same number of input-output edges to feasible layers with fiewer nodes  /// </summary>
 /// <param name="dag">the layered graph</param>
 /// <param name="layering">the layering to change</param>
 /// <param name="nodeCount">shows how many nodes are represented be a node</param>
 /// <param name="cancelObj"></param>
 static internal void Balance(Graph dag, int[] layering, int[] nodeCount, CancelToken cancelObj) {
     Balancing b = new Balancing(dag, layering, nodeCount);
     b.Run(cancelObj);
 }
        /// <summary>
        /// balances the layers by moving vertices with
        /// the same number of input-output edges to feasible layers with fiewer nodes  /// </summary>
        /// <param name="dag">the layered graph</param>
        /// <param name="layering">the layering to change</param>
        /// <param name="nodeCount">shows how many nodes are represented be a node</param>
        /// <param name="cancelObj"></param>
        static internal void Balance(Graph dag, int[] layering, int[] nodeCount, CancelToken cancelObj)
        {
            Balancing b = new Balancing(dag, layering, nodeCount);

            b.Run(cancelObj);
        }