HDU 1016 Prime Ring Problem(DFS回溯+素数判断)
来源:互联网 发布:自行车风火轮编辑软件 编辑:程序博客网 时间:2024/04/29 16:37
HDU 1016 Prime Ring Problem(DFS回溯+素数判断)
http://acm.hdu.edu.cn/showproblem.php?pid=1016
题意:
给你一个n,要求输出所有由1,2,3…n构成的素数环。所谓素数环就是该环中的任意相邻两个数的和是一个素数。且按字典序从小到大输出。
分析:
本题在刘汝佳的入门经典里也有。
首先利用素数筛选法求出100以内的所有素数。
然后用dfs从小到大依次选取所有数字来构成环,注意当选完最后一个数的时候要用它和1(首位的数)判断是否他们的和是一个素数。
AC代码:
#include<cstdio>#include<cstring>using namespace std;const int maxn=100;int n;int prime[maxn];//prime[i]=0表i为素数,=1表i非素数int ans[maxn],vis[maxn];void get_prime(){ memset(prime,0,sizeof(prime)); for(int i=2;i<maxn;i++)if(!prime[i]) { for(int j=i*i;j<maxn;j+=i) prime[j]=1; }}void dfs(int pos)//当前正在构造ans素数环的第pos个位置{ if(pos==n) { if(prime[ans[0]+ans[n-1]]==0)//头+尾=素数 { printf("%d",ans[0]); for(int i=1;i<n;i++) printf(" %d",ans[i]); printf("\n"); } } else for(int i=1;i<=n;i++)if(!vis[i] && !prime[ans[pos-1]+i]) { vis[i]=1; ans[pos]=i; dfs(pos+1); vis[i]=0;//回溯 }}int main(){ get_prime(); int kase=1; while(scanf("%d",&n)==1) { printf("Case %d:\n",kase++); memset(vis,0,sizeof(vis)); ans[0]=1;//素数环第一个位置固定为1 vis[1]=1; dfs(1); printf("\n"); } return 0;}
0 0
- HDU 1016 Prime Ring Problem(DFS回溯+素数判断)
- hdu 1016 Prime Ring Problem(DFS +回溯法)
- HDU 1016 Prime Ring Problem(DFS回溯)
- HDU-#1016 Prime Ring Problem(DFS+回溯)
- HDU 1016 Prime Ring Problem(经典DFS+回溯)
- HDU 1016 Prime Ring Problem (DFS回溯)
- hdu 1016 Prime Ring problem(dfs 素数环)
- Hdu 1016 Prime Ring Problem (素数环经典dfs)
- hdu-1016 Prime Ring Problem(素数环 dfs)
- HDU 1016 Prime Ring Problem(DFS 素数环问题)
- hdu-1016Prime Ring Problem(素数环 dfs)
- hdu-1016 Prime Ring Problem(素数环) DFS解法
- hdu 1016 Prime Ring Problem(dfs,素数环)
- HDU (dfs)1016 Prime Ring Problem素数环
- hdu 1016Prime Ring Problem dfs经典题 素数环
- 【HDU 1016】Prime Ring Problem(DFS、素数筛)
- dfs hdu 1016 Prime Ring Problem 素数环
- HDU 1016 Prime Ring Problem (素数环)(DFS)
- cxf + spring 的WS-Security示例
- 深入了解Struts2返回JSON数据的原理及具体应用范例
- PLSQL导入导出oracle表
- 手机越狱了,丢失了好多号码,怎么才能找回来.
- Cocos2d-x 3.0正式版及android环境搭建详细教程
- HDU 1016 Prime Ring Problem(DFS回溯+素数判断)
- zedboard中使用opencv对视频进行处理
- cisco 路由器删除单条ACL
- loop 设备 (循环设备)
- 区间求最值 线段树
- KMP算法
- 怎样访问位于某的特定地址的内存(内存映射的设备或图显内存)?
- swift的代码教程-ios简单动画类(Animator)
- 自动设置session方法