https://www.acmicpc.net/problem/2644
코드설명
DFS(깊이우선탐색) + 비트마스킹(BitMask) 을 활용합니다.
가장 가까운 촌수를 찾아서 값을 가져오면 됩니다. DFS와 BFS로 하는것이 가장 간단해보여서 DFS로 구현했습니다.
코드
package Main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static int C, N, H, W, K, M;
public static int answer = 0;
public static int[][] matrix;
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());
st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken()) - 1;
int B = Integer.parseInt(st.nextToken()) - 1;
st = new StringTokenizer(br.readLine());
M = Integer.parseInt(st.nextToken());
matrix = new int[N][N];
for(int i=0;i<M; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken()) - 1;
int y = Integer.parseInt(st.nextToken()) - 1;
matrix[x][y] = 1;
matrix[y][x] = 1;
}
System.out.println(DFS(0, A, B, (1 << A)));
}
public static int DFS(int depth, int now, int target, int visited) {
if(now == target) {
return depth;
}
int ret = -1;
for(int next=0; next<N; next++) {
if(matrix[now][next] == 1 && (visited & (1 << next)) == 0 ) {
ret = Math.max(ret, DFS(depth + 1, next, target, visited + (1 << next)));
}
}
return ret;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 4963 섬의 개수 - DFS(깊이우선탐색) JAVA (0) | 2024.08.29 |
---|---|
[백준] 3758 KCPC - Sort(정렬) JAVA (0) | 2024.08.29 |
[백준] 1793 타일링 - 동적계획법(DynamicProgramming) + 임의 정밀도 / 큰 수 연산(BigInteger) JAVA (0) | 2024.08.23 |
[백준] 1058 친구 - BFS(너비우선탐색) + DFS(깊이우선탐색) + 플로이드–워셜(Floywd Warshall) JAVA (0) | 2024.08.20 |
[백준] 1012 유기농 배추 - BFS(너비우선탐색) JAVA (0) | 2024.08.19 |