Exemplo n.º 1
0
        /// <summary>
        /// Add a row connecting the nodes to the circular linked nodes for each column.
        /// </summary>
        /// <param name="values"></param>
        /// <param name="row"></param>
        /// <returns></returns>
        private DlxNode AddNodeRow(ICollection <int> values, int row)
        {
            DlxNode rv       = null;
            DlxNode leftNode = null;

            foreach (var item in values)
            {
                var headerColumn = _columnHeaders[item];
                var newNode      = new DlxNode(new PuzzleCoordinate(row, item))
                {
                    Header = headerColumn,
                    Left   = leftNode,
                    Right  = null
                };

                headerColumn.AddNode(newNode);

                rv ??= newNode;
                rv.Left       = newNode;
                newNode.Right = rv;

                if (leftNode != null)
                {
                    leftNode.Right = newNode;
                }

                leftNode = newNode;
            }

            return(rv);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Add a new row Dlx node to the end of a column.
        /// </summary>
        /// <param name="newNode"></param>
        public void AddNode(DlxNode newNode)
        {
            var upNode = Up;

            newNode.Up   = upNode;
            newNode.Down = this;
            upNode.Down  = newNode;
            Up           = newNode;

            NodeCount++;
        }