素数环(1-20)

该博客探讨了如何将1到20的数字排列成环状,使得相邻数字之和为素数。通过深度优先搜索与回溯的方法解决这一问题,阐述了递归和回溯在解决此类问题中的应用。
摘要由CSDN通过智能技术生成

题目要求:将1,2,3,…,20这20个数围成一圈,使相邻的两数之和均为素数。

思考:
这样的环显然不止一种,如果要输出所有环,那么就要按照一定顺序,一定原则来输出。
为了方便思考,不妨就假设第一个元素为1,能与1相邻且和为素数的有2,4,10,12,16;
如果将2放置在1之后,紧接着要寻找能与2相邻且和为素数的数,这与前面的步骤相仿,显然可以用递归来实现,而且这种逻辑与图的深度优先遍历不谋而合。
假如1,2的顺序已经遍历完了,那么紧接着要遍历1,4,这就要想到2遍历完之后要回到起点1,这就是回溯的思想了。

因此核心思想就是递归,回溯。

/*
将1,2,3,...,20这20个数围成一圈,使相邻的两数之和均为素数。

PS:以下代码只是20个数的情况,稍加修改即可达到自由输入数的个数。
*/
#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;

int p[41]={
   0};//下表代表数,内容1代表是素数,0代表不是素数
int n[20]={
   0};//存放1-20
int vis[21]={
   0};//表示n中存放的数是否被访问过

void Init_p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值