题目描述

520马上就要到了,丁丁妹在思考送自己的室友什么礼物能够彰显她深深的室友之爱。
由于丁丁妹最近沉迷于数学,于是她想出了一个绝(土)妙(味)的礼物——素数项链。
具体而言,素数项链是一个由1~n共n个数排列而成的环,环中任意相邻两个数的和都是素数,如下图就是这样的一条项链:

现在丁丁妹已经买了n个数字,就等着把它们串起来了,她希望知道,素数环一共有多少种可能的情况。
考虑到对称性,我们假设素数环的元素都是从11开始的。

输入描述

单组数据,第一行为一个正整数nn,表示素数环中元素的个数。
数据保证:0<n<20

输出描述

所有可能的素数环,按字典序从小到大输出。

样例输入

8

样例输出

1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2

分析

也是一道很常规的回溯算法题。因为是环,可以先固定第一个位置,之后一次向后面的位置填充数字,但有许多优化剪枝的技巧:

1、n为奇数时,不可能构成素数环,可以简单去想一下

2、可以在构成换之前,就对相邻数字之和进行判断是否为奇数,不是可直接剪枝

3、因为题目原因,两数和最大为39,可以人工直接去完成判断是否为素数,不用for循环了,节省了非常多的时间

我的代码实现

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int n;
vector<int> res(21);
vector<int> tag(21);
bool shisushu(int x)
{if(x==2||x==3||x==5||x==7||x==11||x==13||x==17||x==19||x==23||x==29||x==31||x==37)return 1;elsereturn 0;
}void dfs(int k)
{if(k>=n&&shisushu(res[0]+res[n-1])){for(int i=0; i<n; i++){printf("%d ",res[i]);}printf("\n");}else{for(int i=2; i<=n; i++){if(tag[i]==0&&shisushu(i+res[k-1])){res[k]=i;tag[i]=1;dfs(k+1);tag[i]=0;}}}
}
int main()
{cin>>n;if(n%2==1){return 0;}res[0]=1;     //从1开始tag[1]=1;dfs(1);return 0;
}

美丽的项链(素数环)(回溯法)相关推荐

  1. 编程解决素数环问题Java_回溯法解决素数环问题java实现

    素数环问题: 输入正整数n,把整数1,2,3--,n组成一个环,使得相邻两个整数之和均为素数,输出所有方案,注意同一个环应恰好输出一次.n<==16 样例输入: 6 样例输出: 1 4 3 2  ...

  2. java编程实现素数环_回溯法解决素数环

    #include #include using namespace std;#define N 100000int isp[2 * N];int a[N];int visited[N];int is_ ...

  3. 素数环问题(回溯法)

    素数环是一个计算机程序问题,指的是将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. 现在要求输入一个n,求n个数围成一圈有多少种素数环,规定第一个 ...

  4. 质数环问题c语言,素数环问题

    问题描述:将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. n=20时,下面的序列就是一个素数环: 1 2 3 4 7 6 5 8 9 10 13 ...

  5. 解决回溯法 - 回溯到底是个什么东西(含有大量经典例题加详细分析)

    文章目录 一 .用最通俗的话解释回溯思想: 二.经典例子 1.经典样例1:(01背包问题的回溯解法) 2. 经典样例二:N皇后问题 3. 经典样例三:油田问题 4. 经典样例四:素数环问题 5. 经典 ...

  6. 回溯法采用的搜索策略_17图的搜索算法之回溯法

    回 溯 法 回溯算法实际是一个类似枚举的搜索尝试方法,它的主题思想是在搜索尝试中找问题的解,当不满足求解条件就"回溯"返回,尝试别的路径.回溯算法是尝试搜索算法中最为基本的一种算法 ...

  7. c语言素数环,回溯法——素数环C++实现

    本文共928个字,预计阅读时间需要3分钟. 回溯法简介 回溯法按深度优先策略搜索问题的解空间树.首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否可行(即能得 ...

  8. 0x08算法设计与分析复习(二):算法设计策略-回溯法2

    参考书籍:算法设计与分析--C++语言描述(第二版) 算法设计策略-回溯法 子集和数 问题描述 已知n个不同的正数wi(0≤i≤n−1)的集合,求该集合的所有满足条件的子集,使得每个子集中的正数之和等 ...

  9. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

最新文章

  1. NoSQL实现(3)——Cassandra
  2. 一口气发布1008种机器翻译模型,GitHub最火NLP项目大更新:涵盖140种语言组合
  3. 程序员,为什么如此迷茫?
  4. click group list in left launchpad
  5. OPC Client “failed to execute OPCENUM” 解决方法
  6. 7.16 10.19-10.22
  7. python---如何用Python实现iPhone X的人脸解锁功能?
  8. 数据预处理—8.属性归约之主成分分析(理论及python实现)
  9. VMware vSphere学习之手动克隆虚拟机
  10. Hammer.js分析(一)——基础结构
  11. PHP 判断变量是否定义、是否为空、是否为真
  12. 如何使用USB摄像头搭配Visionpro进行视觉识别
  13. SCM供应链管理系统对更多行业未来
  14. 幅频特性曲线protues_第4章 proteus 模拟电路实验与综合设计
  15. 互联网入口,一个正在消失的“黑洞”
  16. [转]SREng扫描报告分析
  17. python爬虫练习2:取道指成分股数据
  18. matlab 交互效应三维图,【MATLAB】使用MATLAB绘制心理学中的交互作用图
  19. java 图片与base64相互转化
  20. 大学计算机实验教程实验6,大学计算机实验教程.第6版

热门文章

  1. 龙芯2k按键中断驱动_字符设备驱动-高级篇按键中断程序驱动
  2. iphone6 plus
  3. 实习笔记 C#创建excel表格并且学会使用NPOI
  4. 免费的HTTPS证书安全吗可以用吗
  5. SpringBoot 2 访问 Pivotal GemFire 数据
  6. Google主要产品大全
  7. LC-799.香槟塔
  8. sparkSQL之调优
  9. 微信功能,你知道多少
  10. 我的世界java如何快速拿东西_我的世界物品操作技巧 新手快速转移整理物品小技巧...