Problem Solving/Baekjoon
[백준] 15270 친구 팰린드롬 - Backtracking / Java
graycode
2023. 3. 2. 23:53
• 문제 링크
15270번: 친구 팰린드롬
첫째 줄에 총 반친구 수 N(2<=N<=20, 재홍이 제외)와 관계도 수 M(0<=M<=(N^2-N)/2, 최대 50 제한)이 주어진다. 둘째 줄부터 M+1줄까지 친한 친구 관계는 출석번호 u, v로 나타나며 u와 v는 같지 않고, u와 v가
www.acmicpc.net
• 풀이 과정
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int n, m, max;
static Pair[] pairs;
static boolean[] visit;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
pairs = new Pair[m];
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
pairs[i] = new Pair(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
}
visit = new boolean[n + 1];
recur(0, 0);
max *= 2;
if (max < n)
max++;
bw.write(String.valueOf(max));
bw.flush();
}
private static void recur(int depth, int cnt) {
if (depth == m) {
max = Math.max(max, cnt);
return;
}
int x = pairs[depth].x;
int y = pairs[depth].y;
if (visit[x] || visit[y])
recur(depth + 1, cnt);
else {
visit[x] = visit[y] = true;
recur(depth + 1, cnt + 1);
visit[x] = visit[y] = false;
recur(depth + 1, cnt);
}
}
private static class Pair {
int x, y;
public Pair(int x, int y) {
this.x = x;
this.y = y;
}
}
}