티스토리 뷰
문제링크 : https://www.acmicpc.net/problem/10974
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
int arr[9];
bool visited[9];
void dfs(int idx)
{
if(idx==n+1) //최대 깊이 도달
{
for(int i=1; i<=n; i++) cout << arr[i] << " ";
cout << "\n";
return;
}
for(int i=1; i<=n; i++)
{
if(visited[i]) continue;
arr[idx] = i;
visited[i] = 1; //현재 숫자 선택
dfs(idx+1);
visited[i] = false; //백트래킹 (선택 취소)
}
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n;
dfs(1);
return 0;
}
기본적인 백트래킹 문제이다.
배열에 백트래킹을 통한 순열 순서를 담아준다.
이후에 깊이가 n에 도달했을 때 해당 배열을 출력해주면 된다.
'백준 > 실버' 카테고리의 다른 글
[백준 2529번] 부등호 (C++) (0) | 2025.03.10 |
---|---|
[백준 10971번] 외판원 순회 2 (C++) (0) | 2025.03.08 |
[백준 10819번] 차이를 최대로 (C++) (0) | 2025.03.05 |
[백준 1063번] 킹 (C++) (0) | 2025.03.04 |
[백준 1057번] 토너먼트 (C++) (0) | 2025.03.02 |