You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
980 B

#include <bits/stdc++.h>
using namespace std;
/**
测试用例:
8
输出结果:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2
*/
const int N = 30;
int a[N];
int st[N];
int n = 8;
//判断一个数是不是质数
bool isPrime(int n) {
if (n < 2) return false;
for (int i = 2; i <= n / i; i++)
if (n % i == 0) return false;
return true;
}
void dfs(int step) {
if (step == n + 1) {
if (isPrime(a[n] + 1)) {
for (int i = 1; i <= n; i++)printf("%d ", a[i]);
printf("\n");
}
return;
}
for (int i = 2; i <= n; i++)
if (!st[i] && isPrime(a[step - 1] + i)) {
st[i] = true;
a[step] = i;
dfs(step + 1);
st[i] = false;
}
}
int main() {
//第一个位置写死,占上,不能改
a[1] = 1;
//开始深度优先搜索
dfs(2);
return 0;
}