hdu 1016(dfs基礎)

題意:輸入一個數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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章