1016:Prime Ring Problem
来源:互联网 发布:淘宝内衣真人秀图片 编辑:程序博客网 时间:2024/06/05 20:18
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016
方法:回朔法,DFS
思路:素数环是DFS的经典入门题目,我也是第一次学习DFS,在这个题上耗费了很长时间,主要是由于一个参数设置的不对,结果dfs的循环一直跑不进去,郁闷啊,总之,这道题总算是AC了。言归正传,具体思路是,通过递归调用,不断地寻找符合条件的数字,通过递归其实也就是不断地生成解答树,而不断调用直到不能满足要求或是满足要求打印出结果为止,这就是搜索到某一搜索路径的最深处,也就是所谓的深度优先搜索。另外,由于要判断素数,而且数据也给定了范围,因此可以建立哈希表建立起素数的对应关系,这样的预处理可以快速判断素数,这个经验应当牢记。
难点:dfs的写法
#include <iostream>#include<cstdio>#include<string.h>using namespace std;int isp[50];int ans[30] = {0,1};int visit[30] = {0};int n;int cas = 1;int prime(){ for(int i = 2;i < 50;i++) { int ok = 0; for(int j = 2;j < i;j++) { if((i%j == 0)) { ok = 1; break; } } if(ok != 1) isp[i] = 1; } return 0;}void dfs(int pos){ if(pos==n&&isp[1+ans[n]] == 1) { cout<<"1"; for(int i = 2;i <= n;i++) cout<<" "<<ans[i]; cout<<endl; } for(int j = 2;j <= n;j++) { if(!visit[j]&&isp[j+ans[pos]]) { ans[pos+1] = j; visit[j] = 1; dfs(pos+1); visit[j] = 0; } }}int main(){ int i; prime(); //for(i = 0;i < 50;i++) // cout<<isp[i]<<" "; int time = 1; while(cin>>n) { cout<<"Case "<<time++<<":"<<endl; dfs(1); cout<<endl; }}
0 0
- 1016 Prime Ring Problem
- 1016:Prime Ring Problem
- 1016 Prime Ring Problem
- 1016 Prime Ring Problem
- 1016Prime Ring Problem
- 1016 Prime Ring Problem
- 1016:Prime Ring Problem
- hdu 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem
- HDU 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem
- HDU-1016 prime ring problem
- hdu 1016Prime Ring Problem
- hdu 1016 Prime Ring Problem
- HDU-1016 Prime Ring Problem
- HDU-1016-Prime Ring Problem
- hdu 1016 Prime Ring Problem
- WWPN和WWNN的区别
- 单选框复选框
- OS X和iOS公共框架列表
- 从代码到可执行文件
- 数据库访问的一些公共的方法02-返回DataReader,DataSet,DataTable等对象
- 1016:Prime Ring Problem
- 一道关于字符串处理的题
- VC窗口的分割(锁定分割条与定制切分条)
- swirl 4: Vectors
- hudson的周期性自动构建规则
- asp.net—四种控件集
- hdoj 1686 Oulipo
- cocos2dx 常用函数和宏定义
- Java子类继承父类