hdu1016 Prime Ring Problem

http://acm.hdu.edu.cn/showproblem.php?pid=1016

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n;
int flag[20];
int a[45],num[20];
void dfs(int x,int y)
{
   int i;
   num[x]=y;
   flag[y]=1;
   if(x==n)
   {
	   if(a[num[x]+num[1]]==0)
	   {
		   printf("1");
		   for(i=2;i<=n;i++)
			   printf(" %d",num[i]);
		   printf("\n");
	   }
	   return;
   }
   for(i=1;i<=n;i++)
   {
	   if(!flag[i]&&!a[num[x]+i])
	   {
		     dfs(x+1,i);
			 flag[i]=0;//注意回溯
	   }
   }
}
int main()
{
	int i,j,k;
	k=0;
	memset(a,0,sizeof(a));
	a[1]=1;a[0]=1;
	for(i=2;i<=40;i++)
	{
		if(a[i]==0)
		{
			for(j=i+i;j<=40;j+=i)
				a[j]=1;
		}
	}
	while(scanf("%d",&n)!=-1)
	{
		k++;
		printf("Case %d:\n",k);
		memset(flag,0,sizeof(flag));
		dfs(1,1);
       printf("\n");
	  }
    return 0;
}

 

posted @ 2013-07-13 09:54  zlyblog  阅读(128)  评论(0编辑  收藏  举报