15650번: N과 M (2) (acmicpc.net)
15650번: N과 M (2)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
재귀 연습 중
오름차순으로 출력할 수 있게 하기 위해 기존 N과 M(1)코드 dfs 함수의 인자에 prev라는 변수를 추가했다.
해당 변수로 오름차순으로 출력될 수 있도록 구현했다.
솔직히 재귀는 넘 헷갈림..ㅠㅠ
#include <bits/stdc++.h>
using namespace std;
int n, m;
bool visited[10];
int ans[10];
void dfs(int d, int prev)
{
// 출력
if (d == m)
{
for (int i = 0; i < m; i++)
{
cout << ans[i] << " ";
}
cout << '\n';
return;
}
for (int i = 0; i < n; i++)
{
if (!visited[i] && prev < i + 1)
{
// cout << "d : " << d << " i + 1 : " << i + 1 << endl;
visited[i] = true; // 방문처리
ans[d] = i + 1;
dfs(d + 1, i + 1);
visited[i] = false;
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
dfs(0, 0);
}
728x90
'백준이당' 카테고리의 다른 글
[python, C++] 백준 9663 : N-queen (0) | 2024.05.16 |
---|---|
[C++] 백준 9095 : 1,2,3 더하기 (0) | 2024.04.11 |
[C++] 2840번 : 행운의 바퀴 (0) | 2024.03.14 |
[C++] 1697번 : 숨바꼭질 (0) | 2024.03.13 |
[C++] 백준 1158번 : 요세푸스 문제 (0) | 2024.01.14 |