题意:本题题意就是构成一个素数环。即相邻两数之和要为素数。环的元素个数在1到20之间。
素数-只能被1和它本身整除的数
输入6就是1-6排成一个相邻数相加是素数;环,第一个和最后一个加起来也要是素数
/*su shu huan*/ #include <iostream> #include <stdio.h> #include <string.h> #include <math.h> int a[22],n,b[22]={1},k; int num[12] = {2,3,5,7,11,13,17,19,23,29,31,37},nu[40]; int dfs2(int m) { int i; if(m==n+1&&nu[b[1]+b[n]]==1) { for(i=1;i<n;i++) printf("%d ",b[i]); printf("%d\n",b[n]); } else { for(i=2;i<=n;i++) { if(a[i]==1&&nu[i+b[m-1]]) { //m++; b[m++]=i; a[i]=0; dfs2(m); a[i]=1; m--; } } } return 0; } int dfs(int m) { int t=0,i; for(i=1;i<=n;i++) { if(a[i]==1) { t=1;break; //printf("-A-");break; } } //printf("t=%d\n",t); if(t==0&&nu[b[1]+b[n]]==1) { for(i=0;i<n-1;i++) printf("%d ",b[i+1]); printf("%d\n",b[n]); } if(t==0) { for(i=2;i<=n;i++) b[i]=0; k=1;b[1]=1; return 0; } for(i=2;i<=n;i++) { if(a[i]==1&&nu[i+m]==1) {printf("-%d-\n",i); a[i]=0; b[++k]=i; dfs(i); a[i]=1; b[k]=0; k--; } } for(i=2;i<=n;i++) b[i]=0; k=1;b[1]=1; return 0; } int main() { int i; k=1;b[1]=1; for(i=0;i<12;i++) nu[num[i]]=1; scanf("%d",&n); for(i=2;i<=n;i++) a[i]=1; a[1]=0;b[1]=1; dfs2(2); return 0; }
原文:http://www.cnblogs.com/zhangfengnick/p/5851112.html