Algorithm/백준 알고리즘
백준_13565 침투(자바) / 그래프 탐색
미스터로즈
2021. 7. 16. 18:24
시간&메모리 제한
문제
입력 & 출력
문제풀이
package com.Back;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Back_13565 {
static int col,row;
static int[][] map;
static boolean[][] visited;
static boolean flag=false;
static int[] dx= {-1,1,0,0};
static int[] dy= {0,0,-1,1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
col = Integer.parseInt(st.nextToken());
row = Integer.parseInt(st.nextToken());
map = new int[col][row];
for (int i = 0; i < col; i++) {
String temp = br.readLine();
for (int j = 0; j < row; j++) {
map[i][j]=temp.charAt(j)-'0';
}
}
for (int i = 0; i < row; i++) {
if(flag==true)break;
if(map[0][i]==0) {
visited = new boolean[col][row];
visited[0][i]=true;
dfs(0,i);
}
}
if(flag==true) {
System.out.println("YES");
}else {
System.out.println("NO");
}
}
private static void dfs(int x, int y) {
if(x==(col-1)) {
flag=true;
return;
}
for (int i = 0; i < 4; i++) {
int xx = x+dx[i];
int yy = y+dy[i];
if(xx<0||yy<0||xx>=col||yy>=row)continue;
if(map[xx][yy]==0 &&!visited[xx][yy]) {
visited[xx][yy]=true;
dfs(xx,yy);
}
}
}
}
- 이 문제의 경우 DFS로 해결을 했습니다.
- 맨 윗줄에서 4방탐색을 통해서 맨 아래로 도착하는 코드입니다.
- 0 인경우와 방문하지 않은 경우에만 이동을 해서 맨 아랫줄을 찾으면 반환을 해주는 코드를 작성하면 됩니다.