406MS 12K 729 B

用深度优先搜索。

小技巧:

设置一个bool数组:将40以内所有以素数为下标的元素置1

用used数组标记深搜时元素是否访问过

用b数组记录一个解

输入时判断n是否为奇数或者1.

注意:

输出时每个解行后面没有多余的空格。

 

源代码如下

 

#include<stdio.h>
#include<string.h>
bool c[40];
bool used[21];
int b[21];
int n;
void dfs(int t)
{
 int i,j;
 for(i=2;i<=n;i++)
 {
  if(used[i]==0&&c[b[t-1]+i]==1)
  {
   used[i]=1;b[t]=i;
   if(t!=n) dfs(t+1);
   else if(c[i+1])
   {
    for(j=1;j<=n-1;j++)
     printf("%d ",b[j]);
    printf("%d\n",i);
   }
   used[i]=0;b[t]=0;
  }
 }
}
int main()

{
 int count=0;
 memset(c,0,sizeof(c));
 c[3]=c[5]=c[7]=c[11]=c[13]=c[17]=c[19]=c[23]=c[29]=c[31]=c[37]=1;
 while(scanf("%d",&n)!=EOF)
 {
  count++;
  printf("Case %d:\n",count);
  if(n%2!=1&&n!=1)
  {
   memset(used,0,sizeof(used));memset(b,0,sizeof(b));
   b[1]=1;used[1]=1;dfs(2);
  }
  printf("\n");
 }
 return 0;
}

    

posted on 2008-10-23 22:54  pandy  阅读(643)  评论(0编辑  收藏  举报