BOJ_S3_2606
π [S3_2606] λ°μ΄λ¬μ€
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static StringTokenizer st;
static int[][] arr;
static boolean[] isChecked;
static int N;
// μΆλ ₯ν μ»΄ν¨ν° μ
static int cnt = 0;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// μ»΄ν¨ν° μ
int N = Integer.parseInt(br.readLine());
// μ»΄ν¨ν° μμ μ
int cp = Integer.parseInt(br.readLine());
// μ»΄ν¨ν° μ μ°κ²° μν λ°°μ΄ 1-> μ°κ²° o , 0-> μ°κ²° x
arr = new int[N][N];
// κ°μΌ μ 무
isChecked = new boolean[N];
for (int i = 0; i < cp; i++) {
st = new StringTokenizer(br.readLine(), " ");
int first = Integer.parseInt(st.nextToken());
int second = Integer.parseInt(st.nextToken());
// μμ μκ΄ x
arr[first - 1][second - 1] = 1;
arr[second - 1][first - 1] = 1;
}
// κ°μΌ 체ν¬
dfs(0);
// μΆλ ₯
sb.append(cnt);
System.out.println(cnt);
}
// κ°μΌ 체ν¬
static void dfs(int current) {
// κΈ°μ 쑰건
if(current == arr.length) {
return;
}
// μ²μ μμνλ μ»΄ν¨ν°λ λ°μ΄λ¬μ€μ κ°μΌλμ΄μμ
isChecked[current] = true;
for (int i = 0; i < arr.length; i++) {
// λ€μ κ²μ΄ false ( κ°μΌ μλμ΄ μκ³ ), i κ° νμ¬ κ°μ΄ μλκ³ , κ°μ μ΄ μ°κ²°λμ΄ μλ€λ©΄ μΆκ°
if (!isChecked[i] && i != current && arr[current][i] == 1) {
cnt++;
// κ³μ κ°μ λ°λΌμ λ€μ΄κ°μ νμ
νλ€
dfs(i);
}
}
}
}
π€ λμ μκ°
dfsλ‘ νμ΄μ£Όμλ€.
1λ² μ»΄ν¨ν°μ μ°κ²°λμ΄μλ κ°μ μ λκΉμ§ λ°λΌκ°μ isCheckedμ trueλ₯Ό μ£Όκ³ μΉ΄μ΄ν
μ ν΄μ£Όμλ€.
λ§μ μ¬λλ€μ΄ μμμ λλ² μ€μ ν΄μ£Όλ κ²μ κΉλ¨Ήμλ€λλ° μ¬κΈ°μλ λ°©ν₯μ΄ μκΈ° λλ¬Έμ λλ² μ€μ ν΄μ£Όλ κ²μ΄ λ§μ΄ λμΉ μ μλ λΆλΆμ΄λ€.