素数环

来源:互联网 发布:威客网络兼职可靠吗 编辑:程序博客网 时间:2024/06/12 19:50

素数环:从1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数。
基础dfs,回溯。

#include<bits/stdc++.h>using namespace std;int a[101],b[101],n;//a[101]数组里面保存的是序列,b[101]是标记数组 int pd(int x,int y){    int sum=x+y,i;    if(sum<2) return 0;    for(i=2;i<=sqrt(sum);i++)       if(sum%i==0)break;       if(i>sqrt(sum)) return 1;       else return 0;}void prin(){    int i;    for(i=1;i<=n;i++)      printf("%5d",a[i]);      cout<<endl;}int dfs(int t){    int i;    for (i=1;i<=n;i++)                     //有20个数可选     if (pd(a[t-1],i)&&(!b[i]))            //判断与前一个数是否构成素数及该数是否可用      {         a[t]=i;         b[i]=1;         if (t==20) { if (pd(a[n],a[1])) prin();}             else dfs(t+1);         b[i]=0;      }}int main(){       cin>>n;       dfs(1);       return 0;}