题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1016
采用dfs思想进行遍历
#include<iostream>
#include<cstring>
#include<math.h>
using namespace std;
int n;
int a[20];
int num=1;
bool isPrime(int m){
for(int i=2;i<=sqrt((double)m);i++){
if(m%i==0) return false;
}
return true;
}
void print(int a[]){
for(int i=1;i<n;i++)
cout<<a[i]<<" ";
cout<<a[n];
cout<<endl;
}
bool ifExist(int k){
for(int i=2; i<=n;i++) if(a[i]==k) return true;
return false;
}
void dfs(int m){
a[num++]=m;
if(num==n+1){
num--;
if(isPrime(a[1]+a[num])){
print(a);
}
a[num]=-1;
return ;
}
for(int i=2;i<=n;i++)
{
if(!ifExist(i)&&i!=m&&isPrime(m+i)){
dfs(i);
}
}
a[num]=-1;
num--;
}
int main(){
int i=1;
while(cin>>n){
cout<<"Case "<<i<<":"<<endl;
num=1;
dfs(1);
cout<<endl;
i++;
}
return 0;
}