반응형

문제 : https://www.acmicpc.net/problem/15652

 

풀이

N과 M (1), (2), (3) 문제를 합한다.

 

N과 M (1) : https://hydroponicglass.tistory.com/64

N과 M (2) : https://hydroponicglass.tistory.com/65

N과 M (3) : https://hydroponicglass.tistory.com/66

 

(1)을 통해 전체적인 코드를 구현한다.

(2)를 통해 내림차순인 수열은 제거한다.

(3)을 통해 중복 수열도 출력하게 만든다.

 


구현

//c++

#pragma warning(disable:4996)
#include <iostream>
#include <cstdio>

int n, m;
int visited[9];
int seq[9];

void dfs(int value, int idx) {
	//std::cout << value << " " << idx << std::endl;
	//if (visited[value] == 1) return;

	seq[idx] = value;

	if (idx == m) {
		for (int i = 1; i <= m; i++) if (seq[i] < seq[i - 1]) return;
		for (int i = 1; i <= m; i++) printf("%d ", seq[i]);
		printf("\n");
		return;
	}

	//visited[value] = 1;
	for (int i = 1; i <= n; i++) {
		dfs(i, idx + 1);
	}
	//visited[value] = 0;
	return;
}

int main() {
	scanf("%d %d", &n, &m);
	dfs(0, 0);
}