难度:0
涉及算法:dfs搜索
经典的素数环问题:)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int a[10] = {2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29};
bool isp[40] , vis[22];
int n , ans;
void init() {
for(int i=0;i<10;i++) isp[ a[i] ] = true;
memset(vis , false , sizeof(vis));
ans = 0;
}
int c[22];
void dfs(int cnt) {
if(cnt == n) {
if(isp[ c[0] + c[n-1] ]) {
printf("%d" , c[0]);
for(int i=1;i<n;i++) printf(" %d" , c[i]);
puts("");
}
return;
}
for(int i=2;i<=n;i++) {
if(!vis[i] && isp[ c[cnt-1] + i ]) {
vis[i] = true;
c[cnt] = i;
dfs(cnt+1);
vis[i] = false;
}
}
return;
}
int main() {
int cas = 1;
while(~scanf("%d" , &n)) {
printf("Case %d:\n" , cas++);
init();
vis[1] = true;
c[0] = 1;
dfs(1);
puts("");
}
return 0;
}