zstu4028——DFS+回溯——素数和环

Description

把前n个正整数摆成1个环,如果环中所有相邻的2个数之和都是1个素数,该环称为1个n项素数和环。 输入1个整数n,输出共有多少种

Input

输入一个正整数n

Output

输出环的个数,要求环的第一个数字是1

Sample Input

4

Sample Output

2

HINT

大意:回溯,要会写dfs得到全排列

#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

const int maxn = 66666;

int vis[maxn];

int a[maxn];

void dfs(int step)

{

    if(step == n + 1){

        for(int i = 1; i <=  n; i++)

            printf("%d",a[i]);

            return ;

    }

    else {

        for(int i = 1; i <= n ; i++){

            if(!vis[i]){

                vis[i] = 1;

                a[step] = i;

                dfs(step+1);

                vis[i] = 0;

            }

        }

    }

}

 AC代码

#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

const int maxn = 666666;

int vis[maxn];

int n,cout;

int a[maxn];

int prim(int n){

    int i;

    for( i = 2; i*i <= n ;i++){

        if(n%i == 0)

            break;

    }

    if(i*i > n)

    return 1;

     return 0;

}

void dfs(int step)

{

    if(step == n+1){

        int i;

        //for(int j = 1; j <= n ;j++)

        //    printf("%d",a[j]);

        //    puts("");

        for( i = 1; i <= n ;i++){

            int x = a[i],y = a[i+1];

            if(i == n){

                y = a[1];

            }

            if(prim(x+y) == 0){

                break;

            }

        }

        if(i > n) {

        //for(int i = 1; i <= n ;i++)

        //    printf("%d",a[i]);

       // puts("");

       // printf("%d %d\n",a[4]+a[5],prim(a[4]+a[5]));

        cout++;

 

        }

    }

    for(int i = 2; i <= n ; i++){

        if(!vis[i]){

            vis[i] = 1;

            a[step] = i;

            dfs(step+1);

            vis[i] = 0;

        }

    }

}

int main()

{

    a[1] = 1;

    while(~scanf("%d",&n)){

        if(n%2 == 1)

            printf("0\n");

        else {

        cout = 0;

        dfs(2);

        printf("%d\n",cout);

        }

    }

    return 0;

}

 

  

你可能感兴趣的:(DFS)