結果
問題 |
No.13 囲みたい!
|
ユーザー |
|
提出日時 | 2015-02-03 01:45:23 |
言語 | Java (openjdk 23) |
結果 |
RE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 2,764 bytes |
コンパイル時間 | 3,549 ms |
コンパイル使用メモリ | 79,000 KB |
実行使用メモリ | 47,568 KB |
最終ジャッジ日時 | 2024-06-23 06:54:07 |
合計ジャッジ時間 | 6,590 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 10 RE * 6 |
ソースコード
import java.util.*; import java.lang.*; import java.io.*; /* Name of the class has to be "Main" only if the class is public. */ class Main { public static final String IMPOSSIBLE = "impossible"; public static final String POSSIBLE = "possible"; int W; int H; int[][] matrix; int[][] visited; //クラスを使わずにしてみたかったので int getPos(int i, int j) { return j * W + i; } void input() { Scanner scanner = new Scanner(System.in); //番兵を含む W = scanner.nextInt() + 2; H = scanner.nextInt() + 2; matrix = new int[H][W]; for (int i = 1; i < H-1 ; i++) { for (int j = 1; j < W-1; j++) { matrix[i][j] = scanner.nextInt(); } } } public Main() { input(); visited = new int[H][W]; for (int i = 0; i < H; i++) { Arrays.fill(visited[i], -1); } for (int i = 1; i < H - 1; i++) { for (int j = 1; j < W - 1; j++) { if (visited[i][j] != -1) { continue; } if (bfs(i, j)) { System.out.println(POSSIBLE); return; } } } System.out.println(IMPOSSIBLE); } private boolean bfs(int startX, int startY) { LinkedList<Integer> queue = new LinkedList<Integer>(); queue.add(getPos(startX, startY)); int currentNum = matrix[startX][startY]; visited[startX][startY] = 0; while (queue.size() > 0) { final Integer next = queue.pop(); int x = next % W; int y = next / W; for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { int p1 = x + i; int p2 = y + j; if (Math.abs(i + j) == 1 && matrix[p1][p2] == currentNum) { //次の場所が別の親になっているかどうかをチェックします。 if (visited[p1][p2] == 0 || visited[x][y] == getPos(p1, p2)) { continue; } if (visited[p1][p2] != -1) { //この時点で囲める return true; } //次の場所の親が元の場所と設定します。 visited[p1][p2] = getPos(x, y); queue.add(getPos(p1, p2)); } } } } return false; } public static void main(String[] args) { new Main(); }}