hdu 1016(dfs基础)

来源:互联网 发布:生成雪碧图 for mac 编辑:程序博客网 时间:2024/05/22 11:30

题意:输入一个数n,把1到n的自然数放到一个环里,保证相邻的两个数的和是素数。(1和n

思路:素数打表+深搜


#include <iostream>#include <cmath>#include <cstring>#include <cstdio>using namespace std;int a[25],b[45]= {0},n;int isprime[40]= {0,1,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};//素数打表void dfs(int k){    if(k==n+1&&isprime[a[n]+a[1]])    {        for(int i=1; i<n; i++)            cout<<a[i]<<" ";        cout<<a[n]<<endl;        return ;    }    for(int i=2; i<=n; i++)    {        if(!b[i]&&isprime[i+a[k-1]])        {            a[k]=i;            b[i]=1;            dfs(k+1);            b[i]=0;        }    }}int main(){    int casen=0;    while(cin>>n)    {        printf("Case %d:\n",++casen);        a[1]=1;        dfs(2);        printf("\n");        memset(a,0,sizeof(a));    }    return 0;}


0 0
原创粉丝点击