반응형
◎ 문제풀이
행렬그래프가 주어지고 싸이클을 찾는 문제이다. 이는 DFS로 접근하면 된다.
◎ 코드
package org.example.dfs;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
//BOJ16929 Two Dots
public class Dfs1 {
static int n;
static int m;
static int startX;
static int startY;
static char[][] board;
static boolean[][] visited;
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());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
board = new char[n][m];
visited = new boolean[n][m];
for(int i=0;i<n;i++){
board[i] = br.readLine().toCharArray();
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
startX = j;
startY = i;
visited[i][j] = true;
if(dfs(j,i,1)){
System.out.println("Yes");
return;
}
visited[i][j] = false;
}
}
System.out.println("No");
}
public static boolean dfs(int x,int y,int depth){
for(int i=0;i<4;i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(isValidate(nx,ny)){
if(startX == nx && startY == ny && depth >= 4 ) return true;
if(!visited[ny][nx] && board[ny][nx] == board[startX][startY]){
visited[ny][nx] = true;
if(dfs(nx,ny,depth+1)) {
visited[ny][nx] = false;
return true;
}
else visited[ny][nx] = false;
}
}
}
return false;
}
public static boolean isValidate(int x,int y){
return ( x >=0 && y>=0 && x < m & y < n ) ? true : false;
}
}
반응형
'문제풀이 > DFS&BFS' 카테고리의 다른 글
[PS] BOJ18511 큰 수 구성하기 ( DFS ) with JAVA (0) | 2023.08.08 |
---|---|
[PS] BOJ16947 서울 지하철 2호선 ( DFS ) with JAVA (0) | 2023.08.03 |
[PS] BOJ7562 나이트의 이동 ( BFS ) with JAVA (0) | 2023.07.21 |
[PS] BOJ7576 토마토 ( BFS ) with JAVA (0) | 2023.07.12 |
[PS] BOJ2178 미로탐색 ( BFS ) With 파이썬 (0) | 2023.07.05 |