第一想法是:全排列+判断
原代码如下
#include<stdio.h>
#include<stdlib.h>
int n, a[25], prime[38] = // 参考别人的空间换时间方法——打表法
{ 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,
0, 0, 1};
int judge( int x){ // 判断函数
int i, flag = 1;
for( i = 1; i < x; i++){
if( !prime[ a[i] + a[i+1]]){
return 0;
break;
}
}
if( !prime[ a[n] + a[1]]){
return 0;
}
return 1;
}
int swap( int b, int c){ // 交换函数
int temp;
temp = a[b];
a[b] = a[c];
a[c] = temp;
}
void pailie( int k){ // 全排列递归算法
int i, j, flag;
if( k > n){
if( judge(n)){ // 判断是否符合条件
flag = 0;
for( i = 1; i <= n; i++){
if(flag){
printf(" ");
}
printf("%d", a[i]);
flag = 1;
}