JAVA 프로그래밍

문제

미로탐색문제를 해결하는 문제입니다 이를 해결하는 다음 프로그램을 해석하세요 
캐릭터 현재 위치의 줄번호를 입력하세요 : 3
캐릭터 현재 위치의 칸번호를 입력하세요 : 5


미로 맵 탈출 성공!

캐릭터 현재 위치의 줄번호를 입력하세요 : 1
캐릭터 현재 위치의 칸번호를 입력하세요 : 1










미로 맵 탈출 성공!

캐릭터 현재 위치의 줄번호를 입력하세요 : 1
캐릭터 현재 위치의 칸번호를 입력하세요 : 5
미로 맵 탈출 실패

알고리즘

프로그램 시작 
   캐릭터 현재 위치 입력 받기
   미로 맵에서 길 찾기
프로그램 종료

미로 맵에서 길 찾는 함수
   현재 위치를 확인
      먼저, 목표 지점이면 길 찾기 종료
      아직 지나가지 않은 길이면 지나간 흔적을 남기기
   목표 지점에 도착할 때까지 상하좌우로 한 칸씩 이동해 보기

프로그램 코드

	// 파일명 : ./Chapter20/MazeMove.java
	import java.util.Scanner;
	 
	public class MazeMove
	{
		private static int[][] map = {
		                 { 1, 1, 1, 1, 1, 1, 1 },
		                 { 1, 0, 0, 0, 1, 0, 1 },
		                 { 1, 0, 1, 0, 1, 1, 1 },
		                 { 1, 1, 1, 0, 1, 0, 1 },
		                 { 1, 0, 0, 0, 0, 0, 2 },
		                 { 1, 1, 1, 1, 1, 1, 1 }
		                };
		private static final int HEIGHT = 6, WIDTH = 7;
		 
		// 미로 맵 출력
		private static int previousRow = -1, previousColumn = -1;
		private static void printMap( int row, int column ) {
			// 방금 출력한 결과와 동일하면 출력 생략
			if ( ( row == previousRow ) && ( column == previousColumn ) )
				return;
				 
			// 길, 벽, 문, 캐릭터의 기호를 바탕으로 출력
			String[] symbol = { "  ", " \033[44m   \033[0m", " \033[34m문 \033[0m", "  " };
			for( int i = 0; i < HEIGHT; i++ ) {
				for( int j = 0; j < WIDTH; j++ ) {
					if( ( i == row ) && ( j == column ) )
						System.out.print( "옷" );
					else
						System.out.print( symbol[ map[i][j] ] );
				}
				System.out.println();
			}
			 
			System.out.println();
			previousRow = row;
			previousColumn = column;
		}
		 
		private static final int SUCCESS = 2;
		private static final int VISITED = 3;
		private static final int NOTVISITED = 0;
		 
		// 미로 맵에서 길 찾는 함수 
Fb		private static int move( int row, int column ) {
			// 현재 위치를 확인 
			if ( ( row < 0  ) || ( HEIGHT <= row ) || ( column < 0 ) || ( WIDTH <= column ) )
F1				return 0;
			// 먼저, 목표 지점이면 길 찾기 종료 
			else if ( map[row][column] == SUCCESS ) {
				printMap( row, column );
F2				return SUCCESS;
			}
			// 아직 지나가지 않은 길이면 지나간 흔적을 남기기 
			else if ( map[row][column] == NOTVISITED ) {
F3				map[row][column] = VISITED;
		 
				// 목표 지점에 도착할 때까지 상하좌우로 한 칸씩 이동해 보기  
				printMap( row, column );
F4				if ( move( row + 1, column )
F5				                             == SUCCESS )
F6					return SUCCESS;
				printMap( row, column );
F7				if ( move( row, column + 1 )
F8				                             == SUCCESS )
F9					return SUCCESS;
				printMap( row, column );
F10				if ( move( row - 1, column )
F11				                             == SUCCESS )
F12					return SUCCESS;
				printMap( row, column );
F13				if ( move( row, column - 1 )
F14				                             == SUCCESS )
F15					return SUCCESS;
				printMap( row, column );
			}
				 
F16			return 0;
Fe		}
				// 프로그램 시작 
1		public static void main( String[] args ) {
			Scanner scan = new Scanner( System.in );
			// 캐릭터 현재 위치 입력 받기 
			System.out.print( "캐릭터 현재 위치의 줄번호를 입력하세요 : " );
			int row = scan.nextInt();
			System.out.print( "캐릭터 현재 위치의 칸번호를 입력하세요 : " );
			int column = scan.nextInt();
	 
			// 미로 맵에서 길 찾기  
2			if ( move( row, column )
3			                         == SUCCESS )
4				System.out.println( "\n미로 맵 탈출 성공!" );
5			else
6				System.out.println( "\n미로 맵 탈출 실패" );
			scan.close();
		// 프로그램 종료 
7		}
	}

실행 순서

 
 					※ 실행순서 및 메모리상태는 A키(이전) 및 D키(다음)를 눌러도 확인할 수 있습니다