1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| void dividedCovering(vector<vector<int>>& chessBoard, int dr, int dc, int sr, int sc, int size) { if (size == 1) return; size /= 2; if (sr < dr + size && sc < dc + size) { divideCovering(chessBoard, dr, dc, sr, sc, size); } else { int nr = dr + size - 1, nc = dc + size - 1; chessBoard[nr][nc] = 1; divideCovering(chessBoard, dr, dc, nr, nc, size); } if (sr < dr + size && sc >= dc + size) { divideCovering(chessBoard, dr, dc + size, sr, sc, size); } else { int nr = dr + size - 1, nc = dc + size; chessBoard[nr][nc] = 1; divideCovering(chessBoard, dr, dc + size, nr, nc, size); } if (sr >= dr + size && sc < dc + size) { divideCovering(chessBoard, dr + size, dc, sr, sc, size); } else { int nr = dr + size, nc = dc + size - 1; chessBoard[nr][nc] = 1; divideCovering(chessBoard, dr + size, dc, nr, nc, size); } if (sr >= dr + size && sc >= dc + size) { divideCovering(chessBoard, dr + size, dc + size, sr, sc, size); } else { int nr = dr + size, nc = dc + size; chessBoard[nr][nc] = 1; divideCovering(chessBoard, dr + size, dc + size, nr, nc, size); } }
void chessBoardCovering(vector<vector<int>>& chessBoard, int sr, int sc) { int n = chessBoard.size(); divideCovering(chessBoard, 0, 0, sr, sc, n); }
|