อาหารโอชา (Food)

Author: Pakin Olanraktham & Black Cat


เฉลย
#include <stdio.h>

int n, l;
int food[8];
bool no[8];
int ans[720][8];

void recur (int c, int order[], bool alr[]) {
    if (c == n) {
        for(int i=0;i<n;i++)
            printf("%d ", order[i]);
        printf("\n");
        return;
    }

    for (int i=0; i<n; i++) {
        if ((c > 0 && !alr[food[i]-1]) || (c == 0 && !no[food[i]-1])) {
            order[c] = food[i];
            alr[food[i]-1] = true;
            recur(c+1, order, alr);
            alr[food[i]-1] = false;
        }
    }
}

int main() {
    scanf("%d %d", &n, &l);

    for (int i = 0; i < n; i++) food[i]=i+1;

    for (int i = 0; i < l; i++) {
        int a;
        scanf("%d", &a);
        no[a-1] = true;
    }

    int t[n]={};
    bool tt[n]={};

    recur(0, t, tt);
}
#include <iostream>
#include <vector>

using namespace std;

int n, l;
vector <int> food;
vector <bool> no;
vector <vector <int>> ans;

void recur (int c, vector <int> order, vector <bool> alr) {
    if (c == n) {
        ans.push_back(order);
        return;
    }

    for (auto i : food) {
        if ((c > 0 && !alr[i]) || (c == 0 && !no[i])) {
            order[c] = i;
            alr[i] = true;
            recur(c+1, order, alr);
            alr[i] = false;
        }
    }
}

int main() {
    cin >> n >> l;

    no.resize(n);

    for (int i = 0; i < n; i++) {food.push_back(i);}

    for (int i = 0; i < l; i++) {
        int a;
        cin >> a;
        no[a-1] = true;
    }

    vector <int> t(n);
    vector <bool> tt(n);

    recur(0, t, tt);

    for (auto i : ans) {
        for (auto j : i) cout << j + 1 << ' ';
        cout << '\n';
    }
}