알고리즘/백준(BOJ)

[백준/BOJ/알고리즘/파이썬(python)/C++/백트래킹]#15649_N과M(1)

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

 

15649번: N과 M (1)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

 

 

백트래킹 문제로 

파이썬으로하면 permutation으로 몇줄컷이 되는데

C++로 짜면 좀 더 복잡해진다.

파이썬 코드 

import sys
from itertools import permutations
input = sys.stdin.readline

N, M = map(int, input().split())

P = permutations(range(1, N+1), M)

for i in P:
   print(' '.join(map(str,i)))

C++코드

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

int N, M;
int arr[MAX+1];
bool visited[MAX+1]={false};
void permutation(int cnt){
	
	if(cnt==M){	
		for(int i=0;i<M;i++){
			cout<<arr[i]<<" ";
		}
		cout<<"\n";
		return;
	}
	for(int i=1;i<=N;i++){
		if(!visited[i]){
			visited[i]=true;
			arr[cnt]=i;
			permutation(cnt+1);
			visited[i]=false;
		}
	}
	
}
int main(){
	const int cnt=0;
	cin>>N>>M;
	
	permutation(cnt);
	return 0;
}