HDU 1016

来源:互联网 发布:java安装教程 编辑:程序博客网 时间:2024/06/04 01:33
//http://acm.hdu.edu.cn/showproblem.php?pid=1016//经典深搜搜索的一个题#include<stdio.h>#include<string.h>int vis[21];//标记int dis[21];int n;int prime[] = {0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0};//素数表  0--非素数 ,1--素数;void dfs(int x)//深搜{    int i;    if(x==n+1)    {        if(prime[dis[x-1]+1])//判断1加上最后一个数是否为素数        {            for(i=1;i<=n;i++)            {                printf("%d%c",dis[i],i==n?'\n':' ');//输出这个素数环,返回是那个一层搜索            }        }    }    else    {       for(i=2;i<=n;i++)       {           if(vis[i]==0&&prime[i+dis[x-1]])//该数是否被标记,以及前一个数加上现在的数是否是素数           {               vis[i]=1;//标记               dis[x]=i;//记录数               dfs(x+1);//继续搜下去               vis[i]=0;           }       }    }}int main(void){    int count = 1;    while(scanf("%d",&n)!=EOF)    {        memset(vis,0,n);        printf("Case %d:\n",count);        dis[1]=1;        dfs(2);        printf("\n");        count++;    }    return 0;}

0 0
原创粉丝点击