caioj.1040 搜索初步

来源:互联网 发布:java bigdecimal减法 编辑:程序博客网 时间:2024/05/22 14:10

因为按字典序排序

且头尾相接 可理解成是一个圈

所以第一位一定是1

prim 判断素数的函数里可以加上记忆化

因为函数里i*i<=x写成了n debug了很久

边写边输出调试比较好

可以定义debug函数【雾

以及 什么时候要写一下线性筛呀

#include<bits/stdc++.h>using namespace std;template <typename T> void read(T &x){x=0;int f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;for(;isdigit(ch);ch=getchar())x=(x<<1)+(x<<3)+ch-'0';x*=f;}int n;int ans[21];bool vis[21];bool sushu[36];bool prim(int x){if(x<=1) return false;else{if(sushu[x]) return true;for(int i=2;i*i<=x;++i)if(x%i==0) return false;sushu[x]=1;return true;}}void dfs(int k){if(k==n+1){if(prim(ans[n]+1)){for(int i=1;i<=n;++i) cout<<ans[i]<<" ";cout<<endl;}return;}else{for(int i=2;i<=n;++i){if(!vis[i]&&prim(i+ans[k-1])){ans[k]=i;vis[i]=1;dfs(k+1);ans[k]=0;vis[i]=0;}}}}int main(){read(n);memset(ans,0,sizeof(ans));memset(vis,0,sizeof(vis));memset(sushu,0,sizeof(sushu));sushu[2]=1;ans[1]=1;dfs(2); return 0;}


原创粉丝点击