분류 | 게시판 |
베스트 |
|
유머 |
|
이야기 |
|
이슈 |
|
생활 |
|
취미 |
|
학술 |
|
방송연예 |
|
방송프로그램 |
|
디지털 |
|
스포츠 |
|
야구팀 |
|
게임1 |
|
게임2 |
|
기타 |
|
운영 |
|
임시게시판 |
|
class PuzzleSolvingProject { private int[] moveX = {0,0,1,-1}; private int[] moveY = {-1,1,0,0}; private char[] moving = {'L','R','U','D','S'}; // 왼쪽 오른쪽 아래 위 스탈트 private final int WIDTH = 3; private final int HEIGHT = 3; int count=0; public void solvePuzzle(int[] arr){ int[][] puzzleMap = new int[WIDTH][HEIGHT]; int nowX=0,nowY=0; int idx=0; for(int j=0; j<3; j++){ for(int y=0; y<3; y++){ puzzleMap[j][y]=arr[idx++]; if(puzzleMap[j][y]==0){ nowX=j; nowY=y; } } } if(movePuzzle(puzzleMap,nowX,nowY,4)==false) System.out.println("Impossible"); return; } //퍼즐이 다 맞춰졌는지 검사. 맞으면 true 틀리면 false private boolean isPerFect(int[][] map, int nowX, int nowY){ int idx=0; for(int i=0; i<WIDTH; i++) for(int j=0; j<HEIGHT; j++){ if(map[i][j] != idx) return false; idx++; } return true; } //다음 퍼즐을 움직일때 경계를 벗어나는지 검사. 벗어난다면 false, 벗어나지 않는다면 true private boolean isCanMove(int nextX,int nextY){ if( nextX < 0 || nextY < 0) return false; if( nextY >= HEIGHT || nextX >= WIDTH ) return false; return true; } //재귀호출 되는 함수. isPerFect가 true를 반환하면, 함수를 종료하며 true반환. 그리고 이전 움직임 출력. private boolean movePuzzle(int[][] puzzleMap,int nowX,int nowY,int priorMove){ System.out.println("Now X"+nowX+" "+"Now Y"+nowY+" "+"priorMove"+" "+moving[priorMove]); for(int i=0; i<3; i++){ for(int j=0; j<3; j++){ System.out.print(puzzleMap[i][j]); } System.out.println(); } if(isPerFect(puzzleMap,nowX,nowY)==true){ System.out.println(moving[priorMove]); return true; } int[][] newPuzzle = new int[WIDTH][HEIGHT]; for(int i=0; i<WIDTH; i++) for(int j=0; j<HEIGHT; j++) newPuzzle[i][j]=puzzleMap[i][j]; for(int i=0; i<moveX.length; i++){ if(isCanMove(nowX+moveX[i],nowY+moveY[i])){ changePuzzle(newPuzzle,nowX,nowY,nowX+moveX[i],nowY+moveY[i]); if(movePuzzle(newPuzzle,nowX+moveX[i],nowY+moveY[i],i)==true){ System.out.println(moving[priorMove]); return true; } } } return false; } //실제 퍼즐을 바꾸는 역할. 리턴값 엄음. private void changePuzzle(int[][] puzzleMap,int nowX,int nowY,int nextX,int nextY){ int temp=puzzleMap[nextX][nextY]; puzzleMap[nextX][nextY]=puzzleMap[nowX][nowY]; puzzleMap[nowX][nowY]=temp; return; } } public class PuzzleSolving { public static void main(String[] args){ PuzzleSolvingProject ps = new PuzzleSolvingProject(); int[] arr = {1,2,0,3,4,5,6,7,8,9}; ps.solvePuzzle(arr); } }
죄송합니다. 댓글 작성은 회원만 가능합니다.