HDU-1016-Prime Ring Problem

来源:互联网 发布:志鸿优化官方商城 编辑:程序博客网 时间:2024/04/27 10:59

HDU-1016-Prime Ring Problem

http://acm.hdu.edu.cn/showproblem.php?pid=1016

基本的DFS,先打个素数表即可

#include<stdio.h>#include<string.h>#include<stdlib.h>int prime[50];int visit[30];int num[30];int n;void init(){    int i,j;    memset(prime,0,sizeof(prime));  //标记0为素数,1为合数    for(i=3;i<=25;i+=2)    if(prime[i]==0)    {        for(j=3*i;j<=50;j+=2*i)        prime[j]=1;    }    for(i=4;i<=50;i+=2)    prime[i]=1;}void dfs(int x){    int i;    if(x==n+1&&prime[num[x-1]+1]==0)    {        for(i=1;i<=x-1;i++)        printf(i==x-1?"%d\n":"%d ",num[i]);        return;    }    for(i=2;i<=n;i++)    if(!visit[i])    {        if(prime[num[x-1]+i]==0)        {            num[x]=i;            visit[i]=1;            dfs(x+1);            visit[i]=0;        }    }    return;}int main(){    int t=1;    init();    while(scanf("%d",&n)!=EOF)    {        printf("Case %d:\n",t++);        if(n%2==1)        {            printf("\n");            continue;        }        memset(visit,0,sizeof(visit));        visit[1]=1;        num[1]=1;        dfs(2);        printf("\n");    }    return 0;}