整体思路就是普通的dfs,只是判断条件多了一个素数,如果出了问题,可以按照正常dfs修改,本人初学dfs,代码可能有问题
#include<iostream>
using namespace std;
const int N = 999;
int a[N];//保存结果
int vis[N];//判断是否使用 0未使用,1使用
int n;//要输入的位数
bool pd(int x,int y){
int i = x+y;
for(int j = 2 ; j * j <= i ; j++){
if(i % j == 0){
return false;
}
}
return true;
}
void dfs(int h){
if(h == n && pd(a[h-1],0)){ //找到并且首位和是素数
for(int i = 0 ; i < n ; i++){
cout<<a[i] <<" ";
}
cout<<endl;
return;
}
//没找到开始dfs
for(int i = 1 ; i <= n ; i++){
if(pd(a[h-1],i) && vis[i] == 0){
vis[i] = 1;
a[h] = i;
dfs(h+1);
vis[i] = 0;
}
}
}
int main(){
cin>>n;
dfs(0);
}