HDOJ 1016(DFS)

#include<stdio.h>
#include<math.h>
int prime(int n)
{
    int i;
    for(i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)
        return 0;
    }
    return 1;
}
int str[21];
int n;
int i,totle=0;
int shuzi[21];
int prime1[38]={0};
void dfs(int num)
{
    int i;
    if(num==n&&prime1[1+shuzi[n]])
    {
        for(i=1;i<=n;i++)
           printf("%d%c",shuzi[i],(i<n?' ':'n'));
           return;
    }
    else
    {
      for(i=2;i<=n;i++)
      {
          if(!str[i]&&prime1[shuzi[num]+i])
        {
             shuzi[num+1]=i;
             str[i]=1;
             dfs(num+1);
             str[i]=0;
        }
      }
    }
}
int main()
{
    for(i=2;i<38;i++)
   {
    if(prime(i))
    prime1[i]=1;
    else
    prime1[i]=0;
   }
   prime1[0]=prime1[1]=0;
    while(scanf("%d",&n)!=EOF)
    {
      for(i=0;i<21;i++)
        str[i]=0;
      totle++;
      printf("Case %d:n",totle);
      shuzi[1]=1;
      //str[1]=1;
      dfs(1);
      printf("n");
    }
    return 0;
}

posted @ 2012-04-17 09:06  加拿大小哥哥  阅读(325)  评论(0编辑  收藏  举报