hdu1016Prime Ring Problem深搜

#include<stdio.h>

#include<iostream>

#include<string.h>

#include<queue>

#include<stack>

#include<list>

#include<stdlib.h>

#include<algorithm>

#include<vector>

#include<map>

#include<set>

using namespace std;

int n;

int prime[100];



void Prime()

{

    for(int i=2;i<=100;i++)

        for(int j=2;j<=100&&i*j<=100;j++)

        if(!prime[i]) prime[i*j]=1;

    prime[0]=1;prime[1]=1;

}



int vis[100];

int a[100];

void dfs(int x)

{

    if(x==n-1){

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

            if(!vis[i]&&!prime[1+i]&&!prime[a[x-1]+i]){

                a[x]=i;

                printf("%d",1);

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

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

                printf("\n");

            }

        }

        return ;

    }

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

        if(!vis[i]&&!prime[a[x-1]+i]){

            a[x]=i;

            vis[i]=1;

            dfs(x+1);

            vis[i]=0;

        }

    }

}



int main()

{

    int t=0;

    Prime();

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

        printf("Case %d:\n",++t);

        memset(vis,0,sizeof(vis));

        a[0]=1;vis[1]=1;

        dfs(1);

        printf("\n");

    }

    return 0;

}

 

你可能感兴趣的:(Prim)