อาหารโอชา (Food)
Author: Pakin Olanraktham & Black Cat
Source: PROGRAMMING.IN.TH
Difficulty: ?
Prerequisites:
เฉลย
#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';
}
}