문제
입력
첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다.
출력
첫째 줄부터 N!개의 줄에 걸쳐서 모든 순열을 사전순으로 출력한다.
해결 방법
내 코드
// [10974] 모든 순열
// 브루트포스, 백트래킹
#include <iostream>
using namespace std;
bool visited[8];
int n, arr[8], tmpArr[8];
void dfs(int idx, int depth)
{
if(depth == n) {
for(int i = 0; i < n; i++) {
cout << tmpArr[i] << " ";
}
cout << '\n';
return;
}
for(int i = 0; i < n; i++) {
if(visited[i] == false && i != idx) {
visited[i] = true;
tmpArr[depth] = arr[i];
dfs(i, depth + 1);
visited[i] = false;
}
}
}
int main(void)
{
cin >> n;
for(int i = 0; i < n; i++) {
arr[i] = i+1;
}
dfs(-1, 0);
}
반응형
'Baekjoon > 백트래킹' 카테고리의 다른 글
[2529] 부등호(C++) (0) | 2022.09.15 |
---|---|
[1182] 부분수열의 합(C++) (0) | 2021.09.09 |