Algorithm/백준
백준 15649 (N과 M (1))
leecom116
2024. 3. 24. 13:52
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static int[] arr;
public static boolean[] visit;
public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
arr = new int[M]; // 임시 순열 값
visit = new boolean[N]; // 노드 방문 여부
dfs(N, M, 0);
bw.flush();
bw.close();
}
public static void dfs(int N, int M, int depth) throws IOException {
if(depth == M) {
for(int val : arr) {
bw.write(val + " ");
}
bw.write("\n");
return;
}
/**
* 노드 방문여부에 따라 재귀 함수 처리
* ex) visit[0](=1) = true일 경우,
* 재귀 함수가 돌면서 1이 아닌 값들을 저장
*/
for(int i=0; i<N; i++) {
if(! visit[i]) {
visit[i] = true;
arr[depth] = i + 1;
dfs(N, M, depth + 1);
// ex) i가 0일 경우 arr[0] = 1, visit[0] = true이므로 arr[1] = 2 출력
visit[i] = false; // 다음 순열 계산을 위해 초기화
}
}
}
}