杭电1016Java实现

举报
bigsai 发表于 2021/02/03 00:43:04 2021/02/03
【摘要】 主环问题: 问题描述 如图所示,环由n个圆组成。将自然数1,2,…,n分别放入每个圆圈中,并且相邻两个圆圈中的数字总和应为素数。 注意:第一个圆圈的数量应该始终为1。 输入 n(0《n<20)。 输出 输出格式如下所示。每行代表从1开始顺时针和逆时针旋转的一系列圆圈数字。数字的顺序必须符合上述要求。按照字典顺序打印解决方案。 你要编写一个完成上述过...

主环问题:
问题描述
如图所示,环由n个圆组成。将自然数1,2,…,n分别放入每个圆圈中,并且相邻两个圆圈中的数字总和应为素数。
注意:第一个圆圈的数量应该始终为1。
输入
n(0《n<20)。
输出
输出格式如下所示。每行代表从1开始顺时针和逆时针旋转的一系列圆圈数字。数字的顺序必须符合上述要求。按照字典顺序打印解决方案。

你要编写一个完成上述过程的程序。

在每个案例后打印一个空行。
Sample Input
6
8
Sample Output
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暴力破解,遍历所有能形成的可能性,然后输出满足条件的,优化的话可以考虑剪枝,还要用一些参数表示元素的个数和之前存储的元素,考虑的条件是元素和前一个元素的和是否为素数,如果到了最后一个数还要考虑第一个数。
代码如下:

import java.util.Scanner;
public class 杭电1016 { static boolean b[]=new boolean[21];//用于判断是否用过 static int time=0;//层数 public static void main(String[] args) { Scanner sc=new Scanner(System.in); int Case=1;//输入案例第几个 while(sc.hasNext()) { int m=sc.nextInt();//个数 int a[]=new int[m];//存储元素 a[0]=1; System.out.println("Case " Case   ":"); dfs(m,a); System.out.println(); //judgel(m);//判断素数 } } private static boolean judgel(int m) {//如果为素数返回真 for(int i=2;i<m;i  ) { if(m%i==0) {return false;} } return true; }
private static void dfs(int m, int[] a) { if(time==m-1) {for(int i=0;i<m;i   ) //知道长度满足,一定满足情况 {if(i==m-1)System.out.print(a[i]);else System.out.print(a[i] " ");}System.out.println();} else for(int i=2;i<m 1;i  ) { if(!b[i]) { if(time==m-2) { b[i]=true; if(judgel(i a[time])&&judgel(i 1)) { a[  time]=i; dfs(m,a); time--; } b[i]=false; } else { b[i]=true; if(judgel(i a[time])) { a[  time]=i; dfs(m,a); time--; } b[i]=false; } } } }
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

新手小白,时间和复杂度都很高。。

文章来源: bigsai.blog.csdn.net,作者:Big sai,版权归原作者所有,如需转载,请联系作者。

原文链接:bigsai.blog.csdn.net/article/details/79835103

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。