当前位置: 首页 > news >正文

素数环问题----回溯法应用(1)

问题描述:
把整数{1, 2, …, 20}填写到一个环中,要求每个整数只填写一次,并且相邻的两个整数之和是一个素数。
例如,{1, 2, 3, 4}的填写结果:
在这里插入图片描述
算法思想:
这个素数环有20个位置,每个位置可以填写的整数有1~20共20种可能,可以对每个位置从1开始进行试探,约束条件是正在试探的数满足如下条件:

(1)与已经填写到素数环中的整数不重复;

(2)与前面相邻的整数之和是一个素数;

(3)最后一个填写到素数环中的整数与第一个填写的整数之和是一个素数。

在填写第k个位置时,如果满足上述约束条件,则继续填写第k+1个位置;如果1~20个数都无法填写到第k个位置,则取消对第k个位置的填写,回溯到第k-1个位置。

在这里插入图片描述伪代码:

void PrimeCircle(int n)  //填写1~n共n个整数 
{
	
	int i,k; 
	for(i=0;i<n;i++)
		a[i]=0;
	a[0]=1; k=1;
	while(k>1)
	{
		a[k]=a[k]+1;
		while(a[n]<=n)
			if(Check(k)==1) break;
			else a[k]=a[k]+1;
		if(a[k]<=n&& k==n-1)
		{
			 for(i=0;i<n;i++)
			 cout<<a[i]<<" ";
			 return ;
		} 
		if(a[k]<=n&& k<n-1)
		{
			k=k+1;
		}
		else   a[k--]=0; 
	} 
} 


int Check(int k)  //检查位置K的填写是否满足约束条件 
{
	int flag=0;
	for(int i=0;i<k;i++)
		if(a[i] == a[k]) return 0;
	flag =Prime(a[k]+a[k-1]);
	if(flag == 1 && k == n-1)
		flag= Prime(a[k]+a[0]);
}
int Prime(int x)  //判断是否是素数 
{
	int i,n;
	n =(int)sqrt(x);
	for(i=2;i<=n;i++)
	  if(x%i == 0) return 0;
	return 0;
}

相关文章:

  • 回溯法应用:求解n皇后问题
  • 流水线作业调度最小时间问题
  • 动态路由RIP配置
  • 机器学习-梯度下降实验
  • 如何使用github协作(修改远端仓库)
  • 工具使用之notepad++配置C/C++编译环境
  • javaweb期末开发项目笔记
  • Mysql安置配置过程中的问题及解决方法
  • 机器学习实验四 ——基于距离的层次聚类
  • 机器学习第二关——k-means算法流程
  • eclipse中怎么删除Web App Libraries重复的jar包
  • 常见Http响应状态码
  • 记录EduCoder实验平台的感受(答案匹配机制)
  • 二手车交易系统数据库的表格设计
  • eclipse建servlet 注解正确 却无法访问
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 2017-08-04 前端日报
  • java多线程
  • Java小白进阶笔记(3)-初级面向对象
  • MobX
  • windows-nginx-https-本地配置
  • 阿里研究院入选中国企业智库系统影响力榜
  • 大数据与云计算学习:数据分析(二)
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (1)常见O(n^2)排序算法解析
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (理论篇)httpmoudle和httphandler一览
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)项目管理杂谈-我所期望的新人
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET Remoting学习笔记(三)信道
  • .NET 使用 XPath 来读写 XML 文件
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET实现之(自动更新)
  • .Net组件程序设计之线程、并发管理(一)
  • .skip() 和 .only() 的使用
  • :=
  • ??javascript里的变量问题
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [BZOJ 1040] 骑士
  • [DEBUG] spring boot-如何处理链接中的空格等特殊字符
  • [emacs] CUA的矩形块操作很给力啊
  • [ios-必看] IOS调试技巧:当程序崩溃的时候怎么办 iphone IOS
  • [JavaScript]_[初级]_[关于forof或者for...of循环语句的用法]