回溯法之例~素数环

本文通过素数环问题详细介绍了回溯法的运用。利用回溯法解决给定数字n排列成环,相邻数字之和为素数的问题。文中提供C语言代码实例,并对关键函数prime()进行了分析,强调了回溯法中固定下标更新状态的重要性。
摘要由CSDN通过智能技术生成

素数环—回溯法

问题介绍

给定数字 n ,排列从 1 到 n 的数字成环,使得相邻的俩数字之和为素数(质数)

问题分析

本文引入此问题是为了讲解下回溯法。介绍下回溯法:

大家应该知道迷宫,在走迷宫的时候选定一条道路,走不通回来继续走,走不通回来继续走… 回溯法类似,回溯嘛,就是走不对回来换条路呗,直到找到合适的问题解决方案。

再到本问题来,分析下数据结构,环嘛,就是线性的,所以用个一维数组存放环即可,在此定义环数组为 home,大小为 n 。对于一个环,要有一个起点,但是起点是哪个数字无所谓,在此初始化数组第一个元素
为 1 。另外需要另一个数组保存给定的数字的集合,所以定义该数组为 arr ,大小
为 n。上面讲到,已经初始化化环的第一个元素,所以就从该元素开始。逻辑部分如下:

取得环的当前最后一个元素 lastNumber,遍历数组 arr ,若遍历过程中当前数字
不存在于 home 数组中 且 当前数字与 lastNumber 和为质数,则将该数字添加
到环的末尾,准确说是指定下标的位置。到环的长度等于 n 时,便是一种解决方案。

代码实例(C语言)

#inclu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值