[swexpert] 1226. 미로 1 (bfs, java)
728x90
반응형
원래 시작점 위치 (2인 곳)을 따로 찾아서 시작점으로 넣어줘야 할 것 같은데 모든 예제의 시작점이 같길래 그냥 (1,1)로 넣어줬다. 만약 다른 테스트 케이스도 돌리는 거라면 시작점도 따로 변수에 담아줘야 할 것이다.
D4지만 가장 간단한 bfs예제였다.
끝나는 경우는 3인 곳을 끝까지 만나지 못한 경우를 flag변수의 false로 하여 조건 출력해주면 된다.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Solution {
static int t;
static int[][] map;
static int[] xpos= {0,0,1,-1};
static int[] ypos= {1,-1,0,0};
static boolean[][] vis;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
for(int t=1;t<=10;t+=1) {
sc.nextInt();
map=new int[16][16];
vis=new boolean[16][16];
for (int i = 0; i < 16; i++) {
String s=sc.next();
for (int j = 0; j < 16; j++) {
map[i][j]=s.charAt(j)-'0';
}
}
System.out.printf("#%d ",t);
bfs();
}
}
private static void bfs() {
Queue<Integer[]> q=new LinkedList<>();
q.add(new Integer[] {1,1});
vis[1][1]=true;
boolean arrived=false;
while(q.size()!=0) {
int y=q.peek()[0];
int x=q.peek()[1];
q.poll();
if(map[y][x]==3) {
System.out.printf("%d\n",1);
arrived=true;
break;
}
for (int k = 0; k < 4; k++) {
int yy=y+ypos[k];
int xx=x+xpos[k];
if(xx<0 || yy<0 || xx>=16 || yy>=16)continue;
if(map[yy][xx]==1)continue;
if(vis[yy][xx])continue;
vis[yy][xx]=true;
q.add(new Integer[] {yy,xx});
}
}
if(!arrived) {
System.out.printf("%d\n",0);
}
}
}
728x90
반응형
'swexpert' 카테고리의 다른 글
[swexpert] 1238. Contact (java, bfs) (0) | 2021.03.16 |
---|---|
[swexpert] 7733. 치즈 도둑 (bfs, java) (0) | 2021.03.08 |
[swexpert] 1234. 비밀번호 (java) (0) | 2021.02.26 |
[swexpert] 프로세서 연결하기 (java, dfs, 백트래킹) (0) | 2021.02.25 |
[swexpert] 2105. 디저트 카페 (java, 시뮬레이션, 모든 탐색) (0) | 2021.02.25 |
TAGS.