[BOJ/C+]15663号NとM(9)


初めてこの問題を見た時は簡単に解決できると思ったのですが、繰り返しの制限を避けるためにちょっと手を焼いてしまいました.
  • sort()関数を使用してアレイをソートします.
  • 最後に追加された数と今回追加された数の値が同じであれば、繰り返しが発生し、出力すべきではありません.
  • は、最後に追加された数字をxdxに格納し、新しい格納値と比較した.
  • Code

    #include <iostream>
    #include <algorithm>
    #define MAX 8
    using namespace std;
    
    int n, m;
    int arr[MAX], result[MAX];
    bool chk[MAX];
    
    void Input(){
        cin >> n >> m;
        for (int i = 0; i < n; i++){
            cin >> arr[i];
            chk[i]=false;
        }
        sort(arr, arr + n);
    }
    
    void DFS(int cnt) {
        if (cnt==m) {
            for (int i=0; i<m; i++)
                cout<<result[i]<<" ";
            cout<<endl;
            return;
        }
        int xdx = 0;
        for (int i=0; i<n; i++) {
            if (!chk[i]&&arr[i]!=xdx) {
                result[cnt]=arr[i];
                xdx=result[cnt];
                chk[i]=true;
                DFS(cnt+1);
                chk[i]=false;
            }
        }
    }
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        Input();
        DFS(0);
        return 0;
    }