/// <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); }
/// <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++; }