参考链接:全排列+素数环
全排列
#include <iostream> #include <set> #include <cstdio> #include <map> #include <cstring> #include <cstdio> #include <cctype> #include <queue> #include <vector> #include <malloc.h> #include <algorithm> #include <limits.h>//数据类型的最值常量 #include <cmath> #include <cctype> using namespace std; typedef long long LL; int n,box[20]; int vis[20]; void dfs(int step){ if(step==n+1){//开始确定不存在的下一位的时候停止 for(int i=1;i<=n;i++){ cout<<box[i]<<" "; } cout<<endl; } for(int i=1;i<=n;i++){ if(!vis[i]){ box[step]=i; vis[i]=1; dfs(step+1); vis[i]=0; } } } int main(){ cin>>n; dfs(1); return 0; }素数环
#include <iostream> #include <set> #include <cstdio> #include <map> #include <cstring> #include <cstdio> #include <cctype> #include <queue> #include <vector> #include <malloc.h> #include <algorithm> #include <limits.h>//数据类型的最值常量 #include <cmath> #include <cctype> using namespace std; typedef long long LL; int n,box[25]; int vis[25]; int is_primer(int n){ for(int i=2;i<=sqrt(n);i++){ if(n%i==0){ return 0; } } return 1; } void dfs(int step){ if(step==n+1){ if(is_primer(box[step-1]+1)){ for(int i=1;i<=n;i++){ if(i!=1) cout<<" "; cout<<box[i]; } cout<<endl; return ; } } for(int i=1;i<=n;i++){ if(!vis[i]&&is_primer(box[step-1]+i)){ box[step]=i; vis[i]=1; dfs(step+1); vis[i]=0; } } } int main(){ int kase=0; while(cin>>n){ if(kase) cout<<endl; memset(vis,0,sizeof(vis)); box[1]=1; vis[1]=1; cout<<"Case "<<++kase<<":"<<endl; dfs(2); } }