【題目敘述】https://zerojudge.tw/ShowProblem?problemid=d396
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
int n, Case=1;
int use[17], ans[17];
vector<int> v[17];
int prime[35] = {0,
0, 1, 1, 0, 1, 0, 1, 0, 0, 0,
1, 0, 1, 0, 0, 0, 1, 0, 1, 0,
0, 0, 1, 0, 0, 0, 0, 0, 1, 0,
1, 0, 0, 0};
void printAns(){
for (int i=0; i<n; i++)
cout << ans[i] << ' ';
cout << '\n';
}
void dfs(int idx){
if (idx == n){
if (prime[ans[0] + ans[n-1]]) printAns();
}
for (auto i : v[ans[idx-1]]){
if (i > n) continue;
if (!use[i]) {
use[i] = 1;
ans[idx] = i;
dfs(idx+1);
use[i] = 0;
}
}
}
int main() {
for (int i=1; i<=16; i++){
for (int j=1; j<=16; j++){
if (i == j) continue;
if (prime[i+j]){
v[i].push_back(j);
}
}
}
while (cin >> n){
memset(use, 0, sizeof(use));
memset(ans, 0, sizeof(ans));
use[0] = 1;
use[1] = 1;
ans[0] = 1;
cout << "Case " << Case++ << ":\n";
dfs(1);
}
return 0;
}