2 solutions
-
1
#include<bits/stdc++.h> using namespace std; const int N=45; int a[N]; int ans[N],st[N]; int n; void dfs(int u) { if(u==n) { if(a[ans[1]+ans[u]]==1) { for(int i=1;i<=n;i++) { cout<<ans[i]<<" "; } cout<<endl; } return ; } for(int i=2;i<=n;i++) { if(st[i]==0&&a[ans[u]+i]==1) { ans[u+1]=i; st[i]=1; dfs(u+1); st[i]=0; } } } int main() { a[2]=a[3]=a[5]=a[7]=a[11]=a[13]=a[17]=a[19]=a[23]=a[29]=a[31]=1; cin>>n; ans[1]=1; st[1]=1; dfs(1); return 0; }
-
-1
#include<bits/stdc++.h> using namespace std; const int N=45; int prime[N],ans[N],st[N]; int n; void dfs(int u) { if(u==n) //已经搜索了n个 { if(prime[ans[1]+ans[u]]==1) //说明可以构成质数环 { for(int i=1;i<=n;i++) { cout<<ans[i]<<" "; } cout<<endl; } return ; } for(int i=2;i<=n;i++) //枚举所有的数 { if(st[i]==0&&prime[ans[u]+i]==1) { ans[u+1]=i; //下个位置填i st[i]=1; dfs(u+1); st[i]=0;//回溯 } } } int main() { prime[2]=prime[3]=prime[5]=prime[7]=prime[11]=prime[13]=prime[17]=prime[19]=prime[23]=prime[29]=prime[31]=1; cin>>n; ans[1]=1; st[1]=1; dfs(1); return 0; }
- 1
Information
- ID
- 1258
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- (None)
- # Submissions
- 19
- Accepted
- 5
- Uploaded By