BOJ 15663 : N과 M (9)

2020. 6. 2. 00:46PS/Graph Theory

이 문제는 n,m 범위가 엄청 작기에 백트래킹으러 풀 수 있다.

 

중복 수열 처리는 STL set의 중복 제거 특징을 이용하여 처리할 수 있다.

 

#include <bits/stdc++.h>
#define sanic ios_base::sync_with_stdio(0);
#define MEM 1002
#define f first
#define s second
#define pb push_back
#define all(v) v.begin(), v.end()
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
const ll MOD = 1e9+7;
ll n,m;
vector<ll> v,z;
int vis[MEM];
set<vector<ll>> ans;
void bt(int cur, int d){
    if(d==m){
        ans.insert(z);
        return;
    }
    for(int i=0; i<n; i++){
        if(vis[i]) continue;
        vis[i] = 1;
        z.pb(v[i]);
        bt(i,d+1);
        vis[i] = 0;
        z.pop_back();
    }
}
main()
{
    sanic; cin.tie(0);
    cin >> n >> m;
    for(int i=0,q; i<n; i++){
        cin >> q;
        v.pb(q);
    }
    sort(all(v));
    bt(0,0);
    for(auto a : ans){
        for (int i = 0; i < a.size(); i++)
            cout << a[i] << ' ';
        cout << '\n';
    }
}

'PS > Graph Theory' 카테고리의 다른 글

BOJ 13361 : 최고인 대장장이 토르비욘  (0) 2021.11.15
BOJ 22344 : 그래프 균형 맞추기  (0) 2021.08.01
BOJ 16562 : 친구비  (4) 2021.02.25
BOJ 10282 : 해킹  (0) 2021.01.10