[210405][백준/BOJ] 15649번 N과 M (1)

KeonWoo Kim·2021년 4월 5일
0

알고리즘

목록 보기
39/84

문제

입출력


풀이

가능한 조합의 개수를 구하는 문제이다.
백트래킹을 이용해서 문제를 풀 수 있으며 백트래킹은 dfs를 기반으로 탐색하는 방식이다.

  1. base case는 길이가 m과 같아진다면 배열을 출력시키고 return 시킨다.
  2. 일반 case는 방문하지 않은 숫자라면 배열에 값을 넣어주고 방문했다고 표시를 한 다음에 dfs 탐색을 시작한다. 탐색이 끝나면 방문했다는 표시를 지워준다.

코드

#include <bits/stdc++.h>
using namespace std;

int board[10];
bool vis[10];
int n, m;

void func(int k)
{
	if (k == m)
	{
		for (int i = 0; i < m; ++i)
			cout << board[i] << ' ';
		cout << '\n';
		return;
	}
	for (int i = 1; i <= n; ++i)
	{
		if (!vis[i])
		{
			board[k] = i;
			vis[i] = 1;
			func(k + 1);
			vis[i] = 0;
		}
	}
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n >> m;
	
	func(0);
}
profile
안녕하세요

0개의 댓글

관련 채용 정보