啃爹的输出格式!PE了好几次!
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=16;
int vis[maxn],A[maxn];
int n;
bool isp(int temp){ //判断是否为素数,是则返回true;
int flag=1;
for(int i=2;i<=sqrt(temp);i++){
if(temp%i==0){
flag=0;break;
}
}
if(flag)return true;
else return false;
}
void dfs(int cur){
if(cur==n && isp(A[0]+A[n-1])){
printf("%d",A[0]);
for(int i=1;i<n;i++)printf(" %d",A[i]);
printf("\n");
}
else for(int i=2;i<=n;i++){ //尝试放置每个数i;
if(!vis[i] && isp(A[cur-1]+i)){ //如果i没有被使用过,并且与前一个数之和为素数
A[cur]=i;
vis[i]=1; //使用标志
dfs(cur+1);
vis[i]=0; //一定要改回
}
}
}
int main(){
int count=0;
while(scanf("%d",&n)==1){
memset(vis,0,sizeof(vis));
A[0]=1;
if(count++)printf("\n");
printf("Case %d:\n",count);
dfs(1);
}
return 0;
}