素数环(回溯)
*题意:
将1-20摆成一个环,要求相邻两数相加是素数。
*思路:
回溯
*代码:
#include<iostream> using namespace std; int a[21]; int check1(int c,int b) { for(int i=1;i<=b-1;i++) if(a[i]==c)return 0; return 1; } int check2(int x) { int k; for(k=2;k if(x%k==0)return 0; return 1; } int check3(int j,int i) { if(i<20)return (check2(j+a[i-1])); else return(check2(j+a[i-1])&&check2(j+1)); } void output() { for(int i=1;i<=20;i++) cout<<a[i]<<' '; cout<<endl; }void dfs(int k) { for(int i=2;i<=20;i++) { if(check1(i,k)&&check3(i,k)) { a[k]=i; if(k==20)output(); else { dfs(k+1); a[k]=0; } } } } int main() { int i; for(i=1;i<=20;i++) a[i]=0; a[1]=1; dfs(2); return 0; }