Untitled
unknown
plain_text
9 days ago
4.2 kB
4
Indexable
Never
import java.util.HashMap; class UserSolution { final char direction[] = { 'r', 'u', 'l', 'd' }; final int[] dx = { 0, -1, 0, 1 }; final int[] dy = { 1, 0, -1, 0 }; boolean[][] visited; HashMap<String, Integer> map; int N; String res; int[][] board; void initHM() { map.put("rdlooo", 0); map.put("rrrooo", 1); map.put("dddooo", 1); map.put("rodloo", 2); map.put("drdooo", 2); map.put("rdrooo", 2); map.put("dldooo", 2); map.put("ddrooo", 3); map.put("rroodo", 3); map.put("rddooo", 3); map.put("dllooo", 3); map.put("ddlooo", 3); map.put("drrooo", 3); map.put("roddoo", 3); map.put("rrdooo", 3); map.put("droloo", 4); map.put("drodoo", 4); map.put("rrodoo", 4); map.put("dlodoo", 4); map.put("rodlodoo", 5); map.put("drdooloo", 5); map.put("drodlooo", 5); map.put("drrodooo", 5); map.put("dlodrooo", 5); map.put("droldooo", 5); map.put("dllodooo", 5); map.put("ddddoooo", 6); map.put("rrrroooo", 6); map.put("dddroooo", 7); map.put("rrrooodo", 7); map.put("rdddoooo", 7); map.put("dllloooo", 7); map.put("dddloooo", 7); map.put("drrroooo", 7); map.put("rodddooo", 7); map.put("rrrdoooo", 7); map.put("dlddoooo", 8); map.put("rrdroooo", 8); map.put("ddldoooo", 8); map.put("rdrroooo", 8); map.put("drddoooo", 8); map.put("rodllooo", 8); map.put("ddrdoooo", 8); map.put("rroodloo", 8); map.put("rdldoooo", 9); map.put("rrdloooo", 9); map.put("dldroooo", 9); map.put("rdrolooo", 9); map.put("drdloooo", 9); map.put("rrodlooo", 9); map.put("rdlodooo", 9); map.put("rdlloooo", 9); map.put("rroddooo", 10); map.put("dlloodoo", 10); map.put("ddrolooo", 10); map.put("drroodoo", 10); map.put("drruoooo", 11); map.put("roddrooo", 11); map.put("rrdooodo", 11); map.put("rddloooo", 11); map.put("rrddoooo", 12); map.put("ddlloooo", 12); map.put("ddrroooo", 12); map.put("rrooddoo", 12); map.put("drdroooo", 13); map.put("rodldooo", 13); map.put("rdrdoooo", 13); map.put("dldloooo", 13); map.put("drolodoo", 14); map.put("dloddooo", 15); map.put("drollooo", 15); map.put("ddrodooo", 15); map.put("rrroodoo", 15); map.put("ddlodooo", 15); map.put("drrooloo", 15); map.put("droddooo", 15); map.put("rddroooo", 16); map.put("dlldoooo", 16); map.put("roddlooo", 16); map.put("drrdoooo", 16); } void DFS(int x, int y, int val) { visited[x][y] = true; for (int i = 0; i < 4; i++) { int nextX = x + dx[i]; int nextY = y + dy[i]; if (nextX >= 0 && nextX < N && nextY >= 0 && nextY < N) { if (board[nextX][nextY] == val && !visited[nextX][nextY]) { res += direction[i]; DFS(nextX, nextY, val); res += 'o'; } } } } void countBlock(int N, int[][] mBoard, int[] mTetromino, int[] mPentomino) { this.N = N; board = mBoard; visited = new boolean[N][N]; map = new HashMap<String, Integer>(); initHM(); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (!visited[i][j] && mBoard[i][j] != 0) { res = ""; DFS(i, j, mBoard[i][j]); if (res.length() == 6) mTetromino[map.get(res)]++; else mPentomino[map.get(res) - 5]++; } } } } }
Leave a Comment