c++算法之回溯 素数环(一)
来源:互联网 发布:淘宝小额免密支付 编辑:程序博客网 时间:2024/06/02 01:03
题目描述:从1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数。请输出所有方案(一本通例5.3)
题目分析:将题目想象成一张二维表,要往里面填1~20这20个数,可以利用框架构造
需判断数是否合法且相邻两个数之和为素数(函数判定);以及最后一个数和第一个数是否为素数(这里可以在输出时判定,节约时间)。
程序实现
#include<cstdio> #include<cmath> int a[21],k,sum,num=1; bool b[21]={0}; bool p(int s) //判断素数 { for(int i=2;i<=sqrt(s);i++) if(s%i==0) return 0; return 1; } void print() //输出,注意格式 { for(int i=1;i<20;i++) printf("%d ",a[i]); printf("%d\n",a[20]); } int search(int r) { for(int i=1;i<=20;i++) //枚举1~20 20个待填的数 if(!b[i]&&p(i+a[r-1])) //如果没有被使用并且和上一个数之和为素数 { a[r]=i; b[i]=1; //记录并标记 if(r==20&&p(a[1]+a[20])) print(); //如果填完20个数且第一个数与最后一个数之和为素数(连成环),便输出 else search(r+1); b[i]=0; //回溯,作相反操作(a[r]的值会覆盖,可不清0) } } int main() { search(1); }
另外,像判断素数这样的判断,例:判断一个二维数组是否全标记为1,一般顺向思维是遍历求为1的元素个数再与总数判等。其实可以做标记(或函数直接return),只要其中一个不满足条件便标记退出,更快。
从1到20这另外2:
0个数摆成一个环,要求相邻的两个数的和是一个素数。
从1到20这20个数摆成一个环,要求相邻的两个
从1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数。从1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数。
阅读全文
1 0
- c++算法之回溯 素数环(一)
- c++算法之回溯 素数环(二)
- 回溯算法之素数环问题
- c语言素数环问题(回溯)
- C++搜索与回溯算法之素数环问题
- 素数环(回溯)
- 素数环(回溯)
- 回溯法 之 素数环
- 回溯经典之素数环问题
- 回溯法之素数环问题
- 小白书之回溯法求素数环
- C语言 之 素数算法
- C语言算法之回溯法
- nyist 488 素数环(搜索+回溯)
- NYOJ 素数环(回溯法dfs)
- 素数环 回溯
- 素数环 回溯
- 素数环 DFS +回溯
- 《Unix环境高级编程》第二版
- POJ1458————Common Subsequence
- ubuntu17.04配置opencv3.20(包括contrib)(支持C++,Python3)
- C# 选项、单选、多选、分组、MDI窗体的设计、PictureBox
- 阿里物联网套件-服务端SDK学习实践(基础篇-11发消息到指定的Topic)
- c++算法之回溯 素数环(一)
- 如何配置EditPlus中Java运行环境,运行Java程序
- SQL内置函数
- Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
- FutureTask获取线程返回值, 用来获取耗时较长的计算结果
- JS巧妙实现多级菜单中当前菜单不随页面跳转样式而发生变化
- 二叉树遍历算法实现(递归、非递归)
- win7下安装配置opengrok
- 基于 链表 实现通讯录的功能