public BFSNode(PatternDatabase db)  // initial state --> the empty tile is in the bottom right corner
 {
     this.db        = db;
     this.empty_row = db.rows - 1;
     this.empty_col = db.cols - 1;
     this.direction = Direction.NONE;
     this.board     = new MiniBoard(db.rows, db.cols);
     this.distance  = 0;
 }
 private BFSNode(PatternDatabase db, MiniBoard board, int empty_row, int empty_col, int distance, Direction direction)
 {
     this.db        = db;
     this.empty_row = empty_row;
     this.empty_col = empty_col;
     this.board     = board;
     this.distance  = distance;
     this.direction = direction;
 }
        public PuzzleSolver(int board_size)
        {
            this.board_size = board_size;
            //
            PuzzleType type;

            switch (board_size)
            {
            case 3: type = PuzzleType.PUZZLE_3x3; break;

            case 4: type = PuzzleType.PUZZLE_4x4; break;

            default: throw new Exception("Unsupported board dimensions! Supported are 3x3 and 4x4 puzzles!");
            }
            //
            patternDB = new PatternDatabase(type);
        }