HDOJ_1016 素数环

这个题还是用递归做的,就是一个一个深度遍历,条件合适时,就输出当前数组存储的の即可

#include<stdio.h>
#include<math.h>
#include<string.h>
int a[25],ben[25],n;
int prime(int k)
{
    int i;
    for(i=2;i<sqrt(k)+1;++i)
        if(k%i==0)
            return 0;
    return 1;
}
void print(int count)
{
    int i;
    if(count==n&&prime(a[0]+a[n-1]))//当满足条件时就输出
    {
        for(i=0;i<n-1;++i)
            printf("%d ",a[i]);
        printf("%d\n",a[i]);
    }
    else
    {
        for(i=2;i<=n;++i)
        {
            if(!ben[i]&&prime(i+a[count-1]))//用ben做标记
            {
                a[count]=i;
                ben[i]=1;
                print(count+1);
                ben[i]=0;//用完后清除标记
            }
        }
    }
}

int main()
{
    int T=1;
    a[0]=1;
    while(scanf("%d",&n)!=EOF)
    {
        memset(ben,0,sizeof(ben));
        printf("Case %d:\n",T++);
        print(1);
        printf("\n");
    }
    return 0;
}

 

posted @ 2012-08-20 10:56  煮人为乐  阅读(157)  评论(0编辑  收藏  举报