hdu 1016Prime Ring Problem(dfs 回溯入门)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstring>
#include<algorithm>
using namespace std;
int ans[200];
int prime[200];
int vis[200];
int n;
void init()
{memset(prime,0,sizeof(prime));
    for(int i=2;i<200;i++)
      if(!prime[i])
        for(int j=i*i;j<200;j+=i)
            prime[j]=1;

}
void print()
{
 if(!prime[ans[0]+ans[n-1]])
    {
        for(int i=0;i<n-1;i++)
            printf("%d ",ans[i]);
    printf("%d\n",ans[n-1]);
    }
}
void dfs(int pos)
{
     if(pos==n)

    {print();

    }
    else
    {


    for(int i=2;i<=n;i++)
    {
        if(!vis[i]&&!prime[ans[pos-1]+i])
        {
            vis[i]=1;
            ans[pos]=i;

            dfs(pos+1);
            vis[i]=0;
        }
    }
    }
}
int main()
{int w=0;

    while(~scanf("%d",&n))
{w++;
printf("Case %d:\n",w);
    init();
    memset(vis,0,sizeof(vis));
ans[0]=1;
vis[0]=1;
dfs(1);
printf("\n");
}
}

猜你喜欢

转载自blog.csdn.net/sdauguanweihong/article/details/84426596
今日推荐