#include #include using namespace std;#define N 100000int isp[2 * N];int a[N];int visited[N];int is_prime(int n){int i;

/***********************************************************************

输入正整数n,把整数1,2,3……,n组成一个环,使得相邻两个整数之和均为素数,输出时从整数1开始逆时针排序.同一个环应恰好输出一次.n<==16

样例输入:

6

样例输出:

1 4 3 2 5 66

1 6 5 2 3 4

分析:

1、每个环都从1开始,先将数组a[0]赋值1.

2、每选定前一个素数,后一个位置就少一个可选择项,由此可用一个数组bUsed[]来标记状态.

3、前一个后一个选定值总和前一个选定值关联,由此可用回溯法(深度优先遍历的方式遍历解答树)。

************************************************************************/

#include

#include

using namespace std;

int n=0;//输入n<=16

int a[20];

bool bUsed[20];//对应数组a[20],判断对应节点在当前求得素数环中(解答树)是否有它

/*判断是素数*/

bool isp(int n){

if(n<3)

return false ;

int len=(int)sqrt(n+0.0);

for (int i=2;i<=len;i++){

if(n%i==0)

return false ;

}

return true;

}

/*递归输出所有素数环*/

void AA(int cur){

//在最后一层执行,输出当前求得解答串

if(cur==n&&isp(a[0]+a[n-1])){

for (int i=0;i

cout<

cout<

return ;

}

//前n-1层执行,递归选定每一层的整数,使其与前一层的整数之和为素数

else for (int i=2;i<= n;i++){

if(!bUsed[i]&&isp(i+a[cur-1])){//当前值i没被使用,且与前一个选定值之和为素数

a[cur]=i;//选i为当前项值

bUsed[i]=true;//状态从没被使用改为被使用

AA(cur+1);//进入下一层,若cur+1

//递归后面的语句在从n-1层到第1层回调时执行

bUsed[i]=false;//状态还原,使重新求下一个有效串时不被干扰

}

}

}

int main(){

for (int i=0;i<20;i++)

a[i]=i+1;//初始化一个数组1,2,3,4...

memset(bUsed,0,sizeof(bUsed));//全部初始化为false表示均没被使用

while (cin>>n,n){

AA(1);//回溯法遍历解答树,输出所有素数环

}

}

深度优先遍历类似于树的前序遍历。采用的搜索方法的特点是尽可能先对纵深方向进行搜索。这种搜索方法称为深度优先搜索(Depth-First Search)。相应地, 用此方法

解答树图解如下:

输入正整数n,把整数1,2,3,……,n组成一个环,使得相邻的两个整数之和均为素数。 采用深度优先遍历解答树的方法。这里用RINGLENGTH代替了n,由于要求每个数

java编程实现素数环_回溯法解决素数环相关推荐

  1. java编程实现素数环_素数环问题(Java)

    问题描述:将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. 分析:用回溯算法,考察所有可能的排列.然后通过剪枝(题目中的条件)筛选出可能的排列将其 ...

  2. java编程实现素数环_结对编程(JAVA实现)

    项目成员:黄思扬(3117004657).刘嘉媚(3217004685) 二.PSP表格 PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟) Pla ...

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

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

  4. python 回溯法 01背包问题_回溯法解决01背包问题

    回溯法是一个既带有系统性又带有跳跃性的搜索算法. 它在包含问题的所有解的解空间树中按照 深度优先的策略, 从根节点出发搜索解空间树. 算法搜索至解空间树的任一节点时, 总是先判断 该节点是否肯定不包含 ...

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

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

  6. JAVA编程习题及答案_完美版

    JAVA编程习题及答案_完美版 原创 lingwu7 最后发布于2017-08-15 20:01:12 阅读数 10796 收藏 发布于2017-08-15 20:01:12 版权声明:本文为博主原创 ...

  7. 回溯法解决部落冲突问题

    回溯法解决部落冲突问题 实验内容 问题描述 思路分析 方法步骤 实验代码 实验内容 原始部落byteland中的居民为了争抢有限的资源,经常发生冲突.几乎每个居民都有它的仇敌.部落酋长为了组织一支保卫 ...

  8. 回溯法解决工作分配问题

    回溯法解决工作分配问题 问题描述: 设有n件工作分配给n个人.为第i个人分配工作j所需的费用为c[i][j] .试设计一个算法,计算最佳工作分配方案,为每一个人都分配1 件不同的工作,并使总费用达到最 ...

  9. c语言 用回溯算法解决01背包问题,回溯法解决01背包问题

    <回溯法解决01背包问题>由会员分享,可在线阅读,更多相关<回溯法解决01背包问题(21页珍藏版)>请在人人文库网上搜索. 1.回溯法解决01背包问题,回溯法解决01背包问题, ...

最新文章

  1. php 比较字符串差,PHP字符串比较函数strcmp()和strcasecmp()使用总结
  2. 数据结构与算法--绪论
  3. 一丶宝塔+青龙面板安装部署教程及命令-依赖库
  4. Deep learning From Image to Sequence
  5. PHP接口允许ajax跨域访问设置方法(亲测)
  6. 循环类里面的每一个属性
  7. [MEGA DEAL]完整的Java捆绑包(96%折扣)
  8. 【Latex】下标放在符号正下方
  9. vb6.0企业版win7_比win7更快?官方精简win10:3G+不更新,旧电脑福音
  10. AGP与PCI-E的区别 PCI-E接口与PCI接口的区别
  11. 长三角协同优势产业基金正式设立,总规模1000亿
  12. Administration interface
  13. 三角形外接圆圆心 算法 删改版
  14. Unity之物理引擎
  15. 大数据——海量数据处理的基本方法总结
  16. Outlook设置新folder location后无法显示default view的解决方案
  17. 李开复--生命是最严厉的导师
  18. 电脑使用技巧 快捷键
  19. mybatis 整合spring之mapperLocations配置的问题
  20. python获取鼠标的当前坐标

热门文章

  1. Mysql8.0安装以及连接navicat部分bug解决
  2. MATLAB算法实战应用案例精讲-【深度学习】多尺度特征融合(补充篇)
  3. 01 如何设置远程机器的转发
  4. Work20230629
  5. java在电脑哪里_javapc软件_PC的JAVA程序都在哪里?
  6. shineblink ZE08K-CH2O甲醛测量
  7. 第六章----面向对象(下)
  8. html5 bad request,400 bad request的原因-400 bad request的解决方法-吾爱编程网
  9. SSL连接中握手协议及握手过程
  10. Android开源音频编辑工具ringdroid