끄적끄적 코딩
article thumbnail
Published 2019. 9. 11. 20:05
[C++] 백준 15664번 N과 M (10) 알고리즘

백트래킹 문제입니다.

DFS를 통해서 모든 경우의 수를 검색해서 문제를 풀었습니다.

 

 

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;

int n, m;
int visit[10];
vector<int> arr;
vector<int> v;

void DFS(int x)
{
	int use[10010];
	memset(use, 0, sizeof(use));

	v.push_back(arr[x]);
	if (v.size() == m) {
		for (int i = 0; i < v.size(); ++i) {
			printf("%d ", v[i]);
		}
		printf("\n");
		v.pop_back();
		return;
	}

	for (int i = x + 1; i < arr.size(); ++i) {
		if (!visit[i] && !use[arr[i]]) {
			visit[i] = 1;
			use[arr[i]] = 1;
			DFS(i);
			visit[i] = 0;
		}
	}
	v.pop_back();
}

int main(int argc, char* argv[])
{
	scanf("%d", &n);
	scanf("%d", &m);

	arr.resize(n);
	
	memset(visit, 0, sizeof(visit));

	for (int i = 0; i < n; ++i) {
		cin >> arr[i];
	}

	sort(arr.begin(), arr.end());

	for (int i = 0; i < arr.size(); ++i) {
		if (i != 0 && arr[i] == arr[i - 1]) {
			continue;
		}
		visit[i] = 1;
		DFS(i);
		visit[i] = 0;
	}

	return 0;
}

'알고리즘' 카테고리의 다른 글

[C++] 백준 15666번 N과 M (12)  (0) 2019.09.11
[C++] 백준 15665번 N과 M (11)  (0) 2019.09.11
[C++] 백준 15663번 N과 M (9)  (0) 2019.09.11
[C++] 백준 15657번 N과 M (8)  (0) 2019.09.11
[C++] 백준 15656번 N과 M (7)  (0) 2019.09.11

검색 태그