15649(N과 M(1))

난이도: 실버 3

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

15649호:N과 M(1)

문제의 조건을 만족하는 일련의 숫자를 한 줄에 하나씩 인쇄합니다. 중복 시퀀스는 한 번 이상 인쇄해서는 안 되며 각 시퀀스는 공백으로 구분하여 인쇄해야 합니다. 시퀀스는 알파벳 오름차순으로 인쇄됩니다.

www.acmicpc.net

문제

주어진 자연수 N과 M이 주어지면 다음 조건을 만족하는 길이 M의 모든 시퀀스를 찾는 프로그램을 작성하십시오.

  • 1부터 N까지의 자연수 중에서 중복없이 선택된 M개의 수열

기입

자연수 N과 M은 첫 줄에 주어진다. (1≤M≤N≤8)

누르다

문제의 조건을 만족하는 일련의 숫자를 한 줄에 하나씩 인쇄합니다. 중복 시퀀스는 한 번 이상 인쇄해서는 안 되며 각 시퀀스는 공백으로 구분하여 인쇄해야 합니다.

시퀀스는 알파벳 오름차순으로 출력되어야 합니다.



설명

#include <iostream>
using namespace std;
#define MAX 8

int N, M;
int arr(MAX);
bool visited(MAX);

void DFS(int depth)
{
	if (depth == M) 
	{
		for (int i = 0; i < M; i++)
			cout << arr(i) << " ";

		cout << "\n";
		return;
	}

	for (int i = 1; i <= N; i++)
	{
		// 이전에 방문되지 않은 수를 배열에 저장함
		if (visited(i - 1) == false)
		{
			visited(i - 1) = true;
			arr(depth) = i;
			DFS(depth + 1);
			visited(i - 1) = false;
		}
	}
}

int main()
{
	cin >> N >> M;

	DFS(0);
}