hdu 2016 素数环

素数环, 经典的搜索题。

学了线段树之后,对递归有了一些体会,写这一题还是可以的。

ans的地方表示的是,寻找下一个数、

 

素数环,
经典的搜索题。
学了线段树之后,对递归有了一些体会,写这一题还是可以的。
ans的地方表示的是,寻找下一个数、
#include<stdio.h>
int ss[41],visit[21],b[21];
void getss()
{
    int i,j;
    for(i=1;i<=40;i++)
        ss[i]=1;
    ss[1]=0;
    for(i=2;i<=7;i++)
        for(j=i*i;j<=40;j=j+i)
            ss[j]=0;
}
void bfs(int ans,int n)
{
    int i;
    if(ans==n+1&&ss[b[ans-1]+1]==1)
    {
        for(i=1;i<=n;i++)
        {
            if(i==1)printf("%d",b[i]);
            else printf(" %d",b[i]);
        }
        printf("\n");
        return ;
    }
    for(i=2;i<=n;i++)
    {
        if(visit[i]==0)
            if(ss[i+b[ans-1]]==1)
            {
                visit[i]=1;
                b[ans]=i;
                bfs(ans+1,n);
                visit[i]=0;
            }
    }
}    
int main()
{
    int i,t=0,n;
    getss();
    while(scanf("%d",&n)>0)
    {
        for(i=1;i<=n;i++)
            visit[i]=0;
        visit[1]=1;
        b[1]=1;
        printf("Case %d:\n",++t);
        if(n%2==1) {printf("\n");continue;} //当输入为奇数的数,不要搜了。
        bfs(2,n);
        printf("\n");
    }
    return 0;
}

 

 

posted @ 2013-05-12 23:02  芷水  阅读(155)  评论(0编辑  收藏  举报