http://tjuacm.chaosheng.top/problem.php?id=1265
https://vjudge.net/problem/HDU-1016
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 30;
int n;
int path[N];
bool visit[N];
bool isPrime(int x){
for(int i = 2; i * i <= x; i++){
if(x % i == 0) return false;
}
return true;
}
void dfs(int pos){
if(pos == n && isPrime(path[n-1] + 1)){
for(int i = 0; i < n-1; i++){
printf("%d ", path[i]);
}
printf("%d\n", path[n-1]);
}
if(pos == n) return ;
for(int i = 2; i <= n; i++){
if(!visit[i] && isPrime(path[pos-1] + i)){
path[pos] = i;
visit[i] = 1;
dfs(pos + 1);
visit[i] = 0;
}
}
}
int main(){
int t = 0;
while(cin >> n){
t++;
memset(visit, 0, sizeof(visit));
path[0] = 1;
visit[1] = 1;
printf("Case %d:\n", t);
dfs(1);
printf("\n");
}
return 0;
}
京公网安备 11010502036488号