首页 > 代码库 > hdu1016Prime Ring Problem深搜

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;}