알고리즘

C++ 알고리즘 - 15649 N과 M (1) (백트래킹)

마루설아 2025. 1. 20. 19:19

https://www.acmicpc.net/problem/15649

 

#include <bits/stdc++.h>
#define endl "\n"

using namespace std;

/******** 전역변수 ********/
int n, m;
int arr[9] = { 0 };
bool visited[9] = { false };


/******** 함    수 ********/
void dfs(int num) { // DFS : 깊이 우선 탐색
	if (num == m) { // 출력해야 할 만큼의 수(m) 가 되었을 때 출력
		for (int i = 0; i < m; i++) {
			cout << arr[i] << " ";
		}
		cout << endl;
		return;
	}

	for (int i = 1; i <= n; i++) {
		if (!visited[i]) {
			visited[i] = true; // 방문
			arr[num] = i;

			dfs(num + 1);

			// 끝(m) 까지 방문 후 출력, 이후 방문하지 않은 상태로 변경
			visited[i] = false;
		}
	}
}


int main(void) {
	/******** C++ INIT ********/
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);


	/******** 변    수 ********/


	/******** 구    현 ********/
	cin >> n >> m;

	dfs(0);
}