版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35691619/article/details/78900724
环状的数组,故注意判断首围相加是否为素数
一个用来存数,一个用来标记是否使用过该数
由n个数组成的环,就有n个素数对,这个是结束条件
#include<stdio.h>
int n;
int num[25];
int flag[25];
int primer(int n) {
int flag = 1;
for (int i = 2; i < n / 2; i++) {
if (n % i == 0) {
flag = 0;
}
}
return flag;
}
void dfs(int t)
{
if (t == n && primer(num[1] + num[n])) {
for (int i = 1; i <= n; i++) {
if (i==1) {
printf("%d", num[i]);
} else {
printf(" %d", num[i]);
}
}
putchar('\n');
} else {
int temp;
for (int i = 2; i <= n; i++) {
if (!flag[i] && primer(i+num[t])) {
num[t+1] = i;
flag[i] = 1;
dfs(t+1);
flag[i] = 0;
}
}
}
}
int main(void)
{
num[1] = 1;
int count = 1;
while (scanf("%d", &n) != EOF) {
printf("Case %d:\n", count++);
dfs(1);
printf("\n");
}
return 0;
}