Algorithm, boj, 2178(미로탐색)

  • BFS

package org.baekjoon;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class test2178 {
	// dx[i] dy[i] 를 조합해서 상하좌우 이동
	static int dx[] = {-1, 1, 0, 0};
	static int dy[] = {0, 0, 1, -1};
	static int M=4, N=6;

	static int[][] arr ={
			{1,1,0,1,1,0},
			{0,1,0,1,1,0},
			{1,1,1,1,1,1},
			{1,1,1,1,0,1}
			};
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		BFS(0,0);
	}

	static void BFS(int x,int y) {
		Queue<dot> qu = new LinkedList<dot>();
		qu.offer(new dot(x,y));

		while (!qu.isEmpty()) {
			dot d = qu.poll();
			int Cx = d.x;
			int Cy = d.y;
			//System.out.println(Cx+","+Cy);

			// 현재위치에서 상하좌우 검색
			for (int i=0; i<4; i++) {
				// 다음 좌표
				int Nx = Cx + dx[i];
				int Ny = Cy + dy[i];

				// 해당 좌표는 범위 내에 있어야 한다
				if ( Nx>=0 && Nx<M && Ny>=0 && Ny<N ) {
					// 1의 뜻 : 갈수있고, 방문 안했다.
					if (arr[Nx][Ny] == 1) {
						// 현재까지 이동한 걸음+1
						System.out.println("x:"+Nx+" , y:"+Ny);
						arr[Nx][Ny] = arr[Cx][Cy] + 1;
						qu.offer(new dot(Nx, Ny));
					}
				}
			}
		}

		System.out.println(arr[M-1][N-1]);
	}
}
class dot{
	int x;
	int y;

	dot(int x, int y){
		this.x = x;
		this.y = y;
	}
}

Reference

문제로 가기 문제 풀이 참고