private static void DecideKnot(NumeratedNode node, int k)
        {
            var parameters = node.Parameters;
            var knot       = node.Node;

            parameters.L[0] = knot.WL;
            parameters.R[0] = knot.WR;
            for (var i = 0; i < k; i++)
            {
                parameters.L[i] = double.PositiveInfinity;
                parameters.R[i] = double.PositiveInfinity;
            }
            for (var a = 1; a < parameters.Q.Length; a++)
            {
                for (var b = a; b < parameters.Q[a].Length; b++)
                {
                    for (var c = 1; c < parameters.Q[a][b].Length; c++)
                    {
                        for (var d = c; d < parameters.Q[a][b][c].Length; d++)
                        {
                            for (var e = 0; e < parameters.Q[a][b][c][d].Length; e++)
                            {
                                parameters.Q[a][b][c][d][e] = DecideKnotQ(a, b, c, d, e, k);
                            }
                        }
                    }
                }
            }
            node.Parameters.M = knot.WL + knot.WR;
        }
        private void DecideP(NumeratedNode node, int k)
        {
            var nodeX = node.NodeX;
            var nodeY = node.NodeY;
            var nodeZ = node.Node;

            node.Parameters.M = nodeX.Parameters.M + nodeY.Parameters.M - nodeZ.WL - nodeZ.WR;

            for (var a = 1; a <= k - 1; a++)
            {
                node.Parameters.L[a] = MinLRPNode(nodeX.Parameters.L, nodeY.Parameters.L, k, a) - nodeZ.WL;
                node.Parameters.R[a] = MinLRPNode(nodeX.Parameters.R, nodeY.Parameters.R, k, a) - nodeZ.WR;

                for (var b = 1; b <= k - 1; b++)
                {
                    for (var c = 1; c <= k - 1; c++)
                    {
                        for (var d = 1; d <= k - 1; d++)
                        {
                            for (var e = -k; e <= k - 1; e++)
                            {
                                node.Parameters.Q[a][b][c][d][e] = MinQxQyPNode(nodeX.Parameters.Q, nodeY.Parameters.Q,
                                                                                k, a, b, c, d, e);
                            }
                        }
                    }
                }
            }
        }
        private static void DecideS(NumeratedNode node, int k)
        {
            var nodeX = node.NodeX;
            var nodeY = node.NodeY;
            var s     = new double[2];

            s[0] = nodeX.Parameters.M + nodeY.Parameters.M - node.Node.WR;
            s[1] = MinLxRy(nodeX.Parameters.L, nodeY.Parameters.R, k);
            node.Parameters.M = s.Min();

            for (var a = 1; a < k; a++)
            {
                s[0] = nodeX.Parameters.M + nodeY.Parameters.L[a] - node.Node.WR;
                s[1] = MinLxQy(nodeX.Parameters.L, nodeY.Parameters.Q, k, a);
                node.Parameters.L[a] = s.Min();

                s[0] = nodeX.Parameters.R[a] + nodeX.Parameters.M - node.Node.WR;
                s[1] = MinQxRy(nodeX.Parameters.Q, nodeY.Parameters.R, k, a);
                node.Parameters.R[a] = s.Min();

                for (var c = a; c < k; c++)
                {
                    s[0] = nodeX.Parameters.R[a] + nodeY.Parameters.L[c] - node.Node.WR;
                    s[1] = MinQzQy(node.Parameters.Q, nodeY.Parameters.Q, k, a, c);
                    node.Parameters.Q[a][a][c][c][0] = s.Min();

                    for (var b = 1; b <= k - 1; b++)
                    {
                        for (var d = c; d <= k - 1; d++)
                        {
                            node.Parameters.Q[a][b][c][d][1] = double.PositiveInfinity;
                            for (var e = 2; e <= k - 1; e++)
                            {
                                node.Parameters.Q[a][b][c][d][e] = MinQxQy(nodeX.Parameters.Q, nodeY.Parameters.Q, k, a,
                                                                           b, c, d, e);
                            }
                        }
                    }
                }
            }
        }
        private void DecideJ(NumeratedNode nodeZ, int k)
        {
            var nodeX = nodeZ.NodeX;
            var nodeY = nodeZ.NodeY;

            var minLy = MinLJNode(nodeY.Parameters.L, k);
            var minMy = nodeY.Parameters.M < minLy ? nodeY.Parameters.M : minLy;

            nodeZ.Parameters.M = nodeX.Parameters.M + minMy - nodeX.Node.WR;

            var s = new double[2];

            for (var a = 1; a <= k - 1; a++)
            {
                //s[0] = MinLxRyJNode(nodeX.Parameters.L, nodeY.Parameters.R, k, a);//todo
                //s[1] = ;
                //nodeZ.Parameters.L[a] = s.Min();


                nodeZ.Parameters.R[a] = nodeX.Parameters.R[a] - nodeX.Node.WR + minMy;
                for (var b = a; b <= k - 1; b++)
                {
                    for (var c = 1; c <= k - 1; c++)
                    {
                        for (var d = c; d <= k - 1; d++)
                        {
                            for (var e = -k; e <= k - 1; e++)
                            {
                                s[0] = MinQxRyJNode(nodeX.Parameters.Q, nodeY.Parameters.R, k, a, b, c, d, e);
                                s[1] = MinQxQyJNode(nodeX.Parameters.Q, nodeY.Parameters.Q, k, a, b, c, d, e);
                                nodeZ.Parameters.Q[a][b][c][d][e] = s.Min();
                            }
                        }
                    }
                }
            }
        }