素数环 dfs

该博客探讨如何利用深度优先搜索(DFS)方法构造一种特殊的圆环排列,要求圆环中的相邻数字之和为质数。题目指出第一个圆的数字固定为1,且当整数n为奇数时,不存在满足条件的素数环。解题策略包括枚举可能的数字,标记已访问的元素,以及在找不到合适接续数字时进行剪枝操作。博客提供了递归实现的思路,并强调了在没有解决方案时也需打印空行。
摘要由CSDN通过智能技术生成

圆环由n个圆组成,如图所示。将自然数1、2,…,n分别放入每个圆,并且两个相邻圆中的数字总和应为质数。

注意:第一个圆的数目应始终为1。

输入
n(0 <n <20)。
输出

输出格式如下所示。每一行代表环中从顺时针和逆时针1开始的一系列圆圈编号。数字顺序必须满足以上要求。按字典顺序打印解决方案。您将编写一个完成上述过程的程序。在每种情况下都打印空白行。

6
8
Case 1:
1 4 3 2 5 6
1 6 5 2 3 4

Case 2:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2
解题思路

dfs
**即使没有答案,也会在每个案例后打印一个空行。**这里每枚举到当前这个数,从2开始到n枚举哪些数是满足条件,有的话就将当前这个数记录在path数组中,并且标记这个数已经被访问,再递归下去寻找下一个数,如果递归不满足条件的话,将当前这个数置为0。每当cur==n时就输出当前素数环。其中有一个剪枝的操作,如果给定的整数n为奇数,那么肯定不存在素数环,(因为肯定存在两个奇数相邻,而奇数与奇数的和为偶数,所以一定不是素数环)这个节省了不少递归时间,

import java.util.Scanner;

public class Main {

    static int[] vis=new int[21];
    static int[] path&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值