HDOJ1016 素数环(DFS)
题目:
1016 | Prime Ring Problem |
1 /* 2 素数环(顺时针逆时针)---dfs 3 使用栈 4 1-n(n最大是20,相邻最大和39,素数范围2-39之间) 5 2-39间的素数: 6 2,3,5,7,11,13,17,19,23,29,31,37 7 从1开始,逐个尝试,如果是素数,入栈,否则尝试下一个,直到全部尝试完; 8 如果n个数全部入栈了,输出一组解(n最大为20,输出栈可以使用递归), 9 第一个数始终是1,第二个数需要尝试n+1的时候,就表示结束了(next = -1)。 10 */ 11 #include <cstdio> 12 #include <iostream> 13 #include <stack> 14 using namespace std; 15 16 #define N 22 17 //全局变量 18 int prime[40]; 19 int arr[N]; 20 stack<int> s; 21 22 //函数 23 void InitPrime(); 24 void InitArr(int n); 25 void dfs(int n); 26 int GetNext(int b,int n); 27 void Output(int n); 28 //main 29 void main() 30 { 31 int n; 32 InitPrime(); 33 while (scanf("%d",&n)!=EOF) 34 { 35 InitArr(n); 36 dfs(n); 37 } 38 } 39 40 void InitPrime() 41 { 42 for (int i=0;i<40;i++) 43 { 44 switch(i)//本题数量不多,就直接这样写啦,如果数量多可以用【筛选法】或者【试除法】 45 { 46 case 2: case 3: case 5: 47 case 7: case 11: case 13: 48 case 17: case 19: case 23: 49 case 29: case 31: case 37: 50 prime[i] = 1; 51 break; 52 default: 53 prime[i] = 0; 54 } 55 } 56 } 57 58 void InitArr(int n) 59 { 60 for (int i=1; i<=n ; i++) 61 { 62 arr[i] = 0; 63 } 64 } 65 void dfs(int n) 66 { 67 int flag,next,b,idx; 68 s.push(1); 69 arr[1] = 1; 70 flag = 1; 71 idx = 1;//从idx开始寻找匹配数字 72 while (flag) 73 { 74 b = s.top(); 75 next = GetNext(idx,n); 76 if (next == -1)//尝试结束,回溯 77 { 78 if (b == 1 && next == -1)//over 79 { 80 flag = 0; 81 } 82 idx = s.top(); 83 s.pop(); 84 arr[idx] = 0; 85 continue; 86 } 87 if (prime[next+b] == 1)//匹配成功,next入栈,idx化为2 88 { 89 arr[next] = 1; 90 s.push(next); 91 idx = 1; 92 //全部入栈则输出 93 if (s.size() == n && prime[1+s.top()] == 1)//既要顺时针为素数环又要逆时针为素数环 94 { 95 Output(n); 96 cout<<endl; 97 idx = s.top(); 98 s.pop(); 99 arr[idx] = 0; 100 } 101 continue; 102 } 103 //匹配失败,idx化为next 104 idx = next; 105 } 106 107 } 108 int GetNext(int b,int n) 109 { 110 for (int i=b+1;i<=n;i++) 111 { 112 if (arr[i]!=1) 113 return i; 114 } 115 return -1;//全部尝试完返回-1 116 } 117 void Output(int n) 118 { 119 int cur; 120 if (n!=0) 121 { 122 cur = s.top(); 123 s.pop(); 124 Output(n-1); 125 cout<<cur<<' '; 126 s.push(cur);//还要加回去 127 } 128 }
HDOJ1016 素数环(DFS)相关推荐
- 素数环问题 DFS
素数环问题 将从1到n这n个整数围成一个圆环, 若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. 现要求输入一个n,求n个数围成一圈有多少种素数环, 规定第一个数字是1.写出相应的 ...
- 素数环问题---深度搜索遍历
1264: 素数环 时间限制: 1 Sec 内存限制: 128 MB 提交: 29 解决: 8 [提交][状态][讨论版] 题目描述 有一个长度为n的环形序列由1,2,3,...,n组成,环中相邻 ...
- 质数环问题c语言,素数环问题
问题描述:将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. n=20时,下面的序列就是一个素数环: 1 2 3 4 7 6 5 8 9 10 13 ...
- 美丽的项链(素数环)(回溯法)
题目描述 520马上就要到了,丁丁妹在思考送自己的室友什么礼物能够彰显她深深的室友之爱. 由于丁丁妹最近沉迷于数学,于是她想出了一个绝(土)妙(味)的礼物--素数项链. 具体而言,素数项链是一个由1~ ...
- 素数环问题(回溯法)
素数环是一个计算机程序问题,指的是将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. 现在要求输入一个n,求n个数围成一圈有多少种素数环,规定第一个 ...
- 素数环 与 算法 全排列
在说起全排列前,先说一下昨天碰到的一个题目(答案不是我做出来的,但是我感觉有好多个亮点,贴出来方便日后的学习): 素数环 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 ...
- 编程解决素数环问题Java_回溯法解决素数环问题java实现
素数环问题: 输入正整数n,把整数1,2,3--,n组成一个环,使得相邻两个整数之和均为素数,输出所有方案,注意同一个环应恰好输出一次.n<==16 样例输入: 6 样例输出: 1 4 3 2 ...
- java编程实现素数环_回溯法解决素数环
#include #include using namespace std;#define N 100000int isp[2 * N];int a[N];int visited[N];int is_ ...
- 素数环java_素数环问题
DFS,好像主要是对dfs的递归调用吧,自己也不太懂, 总之,它很神奇,多看看代码吧 #include #include #include #include int n; int isp[100]; ...
- SDUTOJ3469_深度优先搜索练习之神奇的矩环(DFS)
深度优先搜索练习之神奇的矩环 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 小鑫的女 ...
最新文章
- 两个形状不同的长方形周长_借助思维导图玩转小学阶段三种不同计算图形周长的方法!...
- Win2K下关联进程/端口之代码初步分析
- 百果园付凌峰:线上单月 1.2 亿背后的数据化运营
- 如何安装最新版本的ABAP Development tools
- jquery 字符串查找_JQuery、Vue等考点
- 人眼定位python代码_使用dlib,OpenCV和Python进行人脸识别—人眼眨眼检测
- java语音读字符串_Android Java文本到语音查看额外的字符串信息
- webApp调试页面的几种方式
- Yii 2.0 权威指南 (2) 使用forms
- python+opencv简单人脸识别(源码)(有手就行)
- 神经网络用英文怎么说,神经网络算法的英文
- Unity遍历文件夹及其文件
- 矩阵转置行列式的运算规律
- 外接鼠标时禁用触控板_连接外接鼠标时如何禁用PC的触摸板
- CM源码(CyanogenMod)源码编译
- 单片机常用芯片总结(一)——LCD1602液晶屏
- 黑马程序员各学科超长体验课知识点汇总
- 梅宏院士:大数据技术的四大挑战与十大趋势
- 洛谷 P3374 树状数组模板1
- ArcGIS制图学习(1)
热门文章
- 漂亮的html404页面源码,一个简单而又漂亮的404页面源码
- 凯盛机器人_机器人登场!水泥发运告别人工,粉尘危害降至最低
- java 与 php lajp_LAJP
- android studio使用nodejs本地服务器json数据_使用Node.js的Alexa技巧
- 学业水平考试网登录_海南高中学业水平考试成绩查询免费登录入口:http://ea.hainan.gov.cn/(已开通)...
- Kafka:Zero-Copy零拷贝
- Centos系统磁盘扩容
- [BZOJ 2839] 集合计数
- 微信小程序——tab切换内容
- UCenter创始人密码正确但是登录不了