結果
問題 | No.228 ゆきこちゃんの 15 パズル |
ユーザー |
![]() |
提出日時 | 2015-06-19 22:46:31 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 47 ms / 5,000 ms |
コード長 | 3,785 bytes |
コンパイル時間 | 1,925 ms |
コンパイル使用メモリ | 79,132 KB |
実行使用メモリ | 50,604 KB |
最終ジャッジ日時 | 2024-07-07 04:08:39 |
合計ジャッジ時間 | 3,451 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 17 |
ソースコード
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.util.ArrayList;import java.util.Comparator;import java.util.HashMap;import java.util.TreeMap;public class Main {public static int[] dp;public static void main(String[] args) throws NumberFormatException,IOException {ContestScanner in = new ContestScanner();int[][] board = new int[4][4];goal = new int[4][4];for(int i=0; i<4; i++){for(int j=0; j<4; j++){goal[i][j] = in.nextInt();}}for(int i=0; i<4; i++){for(int j=0; j<4; j++){board[i][j] = i*4+j+1;}}board[3][3] = 0;if(dfs(board, 0, 3, 3)) System.out.println("Yes");else System.out.println("No");}public static int[] dx = {1, 0, -1, 0};public static int[] dy = {0, 1, 0, -1};public static int[][] goal;public static boolean dfs(int[][] board, int slide, int zx, int zy){if(check(board)) return true;for(int i=0; i<4; i++){int nx = zx+dx[i];int ny = zy+dy[i];if(nx < 0 || nx >= 4 || ny < 0 || ny >= 4) continue;if((slide&1<<board[ny][nx])>0) continue;int tmp = board[ny][nx];board[ny][nx] = 0;board[zy][zx] = tmp;if(dfs(board, slide|1<<tmp, nx, ny)) return true;board[zy][zx] = 0;board[ny][nx] = tmp;}return false;}public static boolean check(int[][] board){for(int i=0; i<4; i++){for(int j=0; j<4; j++){if(board[i][j] != goal[i][j]) return false;}}return true;}}class Timer{long time;public void set(){time = System.currentTimeMillis();}public long stop(){return System.currentTimeMillis()-time;}}class Node{int id;ArrayList<Node> edge = new ArrayList<Node>();public Node(int id) {this.id = id;}public void createEdge(Node node) {edge.add(node);}}class MyComp implements Comparator<int[]> {final int idx;public MyComp(int idx){this.idx = idx;}public int compare(int[] a, int[] b) {return a[idx] - b[idx];}}class Reverse implements Comparator<Integer> {public int compare(Integer arg0, Integer arg1) {return arg1 - arg0;}}class ContestWriter {private PrintWriter out;public ContestWriter(String filename) throws IOException {out = new PrintWriter(new BufferedWriter(new FileWriter(filename)));}public ContestWriter() throws IOException {out = new PrintWriter(System.out);}public void println(String str) {out.println(str);}public void println(Object obj) {out.println(obj);}public void print(String str) {out.print(str);}public void print(Object obj) {out.print(obj);}public void close() {out.close();}}class ContestScanner {private BufferedReader reader;private String[] line;private int idx;public ContestScanner() throws FileNotFoundException {reader = new BufferedReader(new InputStreamReader(System.in));}public ContestScanner(String filename) throws FileNotFoundException {reader = new BufferedReader(new InputStreamReader(new FileInputStream(filename)));}public String nextToken() throws IOException {if (line == null || line.length <= idx) {line = reader.readLine().trim().split(" ");idx = 0;}return line[idx++];}public String readLine() throws IOException{return reader.readLine();}public long nextLong() throws IOException, NumberFormatException {return Long.parseLong(nextToken());}public int nextInt() throws NumberFormatException, IOException {return (int) nextLong();}public double nextDouble() throws NumberFormatException, IOException {return Double.parseDouble(nextToken());}}