public void Assign(BoardConstraints inBoardConstraints,Board inBoard)
        {
            mBoard = inBoard;
            for (int i = 0; i < 9; ++i)
            {
                RowsConstraints[i].Assign(inBoardConstraints.RowsConstraints[i]);
                ColumnsConstraints[i].Assign(inBoardConstraints.ColumnsConstraints[i]);
                ThreeByTreeBlockConstraints[i % 3, i / 3].Assign(
                    inBoardConstraints.ThreeByTreeBlockConstraints[i % 3, i / 3]
                );
                for (int j = 0; j < 9; ++j)
                    CellsConstraints[i, j].Assign(inBoardConstraints.CellsConstraints[i, j]);

                if (inBoardConstraints.TopToBottomDiagonalConstraint != null)
                {
                    TopToBottomDiagonalConstraint = new DiagonalConstraint(true);
                    TopToBottomDiagonalConstraint.Assign(inBoardConstraints.TopToBottomDiagonalConstraint);
                }
                else
                {
                    TopToBottomDiagonalConstraint = null;
                }

                if (inBoardConstraints.mBottomToTopDiagonalConstraint != null)
                {
                    mBottomToTopDiagonalConstraint = new DiagonalConstraint(false);
                    mBottomToTopDiagonalConstraint.Assign(inBoardConstraints.mBottomToTopDiagonalConstraint);
                }
                else
                {
                    mBottomToTopDiagonalConstraint = null;
                }
            }
        }
        public BoardConstraints()
        {
            RowsConstraints = new RowConstraint[9];
            ColumnsConstraints = new ColumnConstraint[9];
            for(int i=0;i<9;++i)
            {
                RowsConstraints[i] = new RowConstraint(i);
                ColumnsConstraints[i] = new ColumnConstraint(i);
            }
            ThreeByTreeBlockConstraints = new ThreeByThreeBlockConstraint[3, 3];
            for(int i=0;i<3;++i)
                for(int j=0;j<3;++j)
                    ThreeByTreeBlockConstraints[i, j] = new ThreeByThreeBlockConstraint(i,j);

            CellsConstraints = new CellConstraint[9,9];
            for (int i = 0; i < 9; ++i)
                for (int j = 0; j < 9; ++j)
                    CellsConstraints[i, j] = new CellConstraint(i,j);

            TopToBottomDiagonalConstraint = null;
            mBottomToTopDiagonalConstraint = null;
        }
 private bool SetupDiagonalConstraints(bool inEnforceDiagonalsConstraint)
 {
     bool statusOK;
     if (inEnforceDiagonalsConstraint)
     {
         TopToBottomDiagonalConstraint = new DiagonalConstraint(true);
         statusOK = TopToBottomDiagonalConstraint.Init(mBoard);
         if (statusOK)
         {
             mBottomToTopDiagonalConstraint = new DiagonalConstraint(false);
             statusOK = mBottomToTopDiagonalConstraint.Init(mBoard);
         }
     }
     else
     {
         TopToBottomDiagonalConstraint = null;
         mBottomToTopDiagonalConstraint = null;
         statusOK = true;
     }
     return statusOK;
 }