230203 TIL + 백준 2178번: 미로 탐색

won·2023년 2월 3일
0

알고리즘 문제풀이

목록 보기
15/32

TIL

문제 하나를 풀었다.

백준 2178번: 미로탐색

https://www.acmicpc.net/problem/2178
쉬우면서 어려운 문제였다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
	static StringTokenizer st;
	static int[] dx= {-1,1,0,0};
	static int[] dy= {0,0,-1,1};
	static int count=0;
	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));
		BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(System.out));
		
		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++) {
			String st=br.readLine();
			for(int j=0;j<m;j++) {
				maze[i][j]=st.charAt(j)-'0';
			}
		}
        
		visited[0][0]=true;
        
		bfs(0,0);
		
		bw.write(String.valueOf(maze[n-1][m-1]));
		bw.flush();
		bw.close();
	}
	
	
		
	public static void bfs(int x,int y) {
		Queue<int[]> q =new LinkedList<int[]>();
		q.add(new int[] {x,y});
		
		while(!q.isEmpty()) {
			int now[]=q.poll();
			int nowx= now[0];
			int nowy=now[1];
			for(int i=0;i<4;i++) {
				int nx=nowx+dx[i];
				int ny=nowy+dy[i];
				if(nx<0 || ny<0||nx>=n||ny>=m) {
					continue;
				}
				if(visited[nx][ny]||maze[nx][ny]==0) {

					continue;
				}
				q.add(new int[] {nx,ny});
				maze[nx][ny]=maze[nowx][nowy]+1;

				visited[nx][ny]=true;
			}
		}
		
	}
}


결과 배열을 하나하나 찍으면 이렇게 나온다.

profile
뭐라도 하자

0개의 댓글