经过观赏我左边的玉程大师的dfs 真心学到了 ,还有printf()函数 

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
int biaoji[10000]={0};//   标记素数 
int a[18],b[100],c[400]={0},n;//c表示是这个数是否为素数 a输出的数组 b标记是否被用过 
void sushu() 
{
	int i,j;
	for(i=2;i<=400;i++)
	{
		if(biaoji[i]==0)
		c[i]=i;
		for(j=2*i;j<=400;j+=i)
		biaoji[j]=1;	
	}
}
void print()
{
	int i;
	printf(\"1\");
	for(i=2;i<=n;i++)
	printf(\" %d\",a[i]);
	printf(\"\\n\");
}
void search(int k)
{
	int i;
	for(i=1;i<=n;i++)
	{
		if(b[i]==0&&c[a[k-1]+i]!=0)
		{
			a[k]=i;   
			b[i]=1;   
			if(k==n)
			{
				if(c[a[k]+1]!=0)
				print();
			}
			else
			search(k+1);    
			b[i]=0;       
		}
	}
}
int main()
{  
	a[1]=1; b[1]=1;
	sushu();
	while(scanf(\"%d\",&n)!=EOF)
	{
		if(n%2==1)
		{
			if(n==1)
			printf(\"1\\n\");    
			else
			printf(\"-1\\n\");
		}
		else                   
		{
			for(int i=2;i<=100;i++)
			b[i]=0;
			//b[1]=1;
			search(2);        
		}
	}
	return 0;
 } 

 

收藏 打印