ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algorithm] 백준 알고리즘 2178 (미로찾기)
    카테고리 없음 2020. 3. 22. 00:01

     

    java코드

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.StringTokenizer;
    
    public class FindMaze{
    	
    	static int N, M;
    	static int maze[][];
    	static boolean visited[][];
    	
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		StringTokenizer st = new StringTokenizer(br.readLine());
    		
    		N = Integer.parseInt(st.nextToken());
    		M = Integer.parseInt(st.nextToken());
    		
    		maze = new int[N][M];
    		visited = new boolean[N][M];
    		
    		for(int i=0; i<N; i++) {
    			st = new StringTokenizer(br.readLine());
    			String line = st.nextToken();
    			for(int j=0; j<M; j++) {
    				maze[i][j] = line.charAt(j)-'0';
    			}
    		}
    		
    		solve();
    		System.out.println(maze[N-1][M-1]);
    	}
    	static void solve() {
    		
    		int dx[] = {-1, 1, 0, 0};
    		int dy[] = {0, 0, 1, -1};
    		
    		Queue<int[]> q = new LinkedList<>();
    		q.add(new int[] {0,0});
    		visited[0][0] = true;
            
    		while(!q.isEmpty()) {
    			int location[] = q.poll();
    			int x = location[0];
    			int y = location[1];
    			
    			for(int i=0; i<4; i++) {
    				int xx = x+dx[i];
    				int yy = y+dy[i];
    				if(xx>=0&&xx<N&&yy>=0&&yy<M) {
    					if(maze[xx][yy]!=0&&!visited[xx][yy]) {
    						q.add(new int[] {xx,yy});
                            visited[xx][yy]=true;
    						maze[xx][yy] = maze[x][y]+1;
    					}
    				}
    			}
    		}
    		
    	}
    }

     

Designed by Tistory.