【DFS】素数环问题
题目:
  输入正整数n,对1-n进行排列,使得相邻两个数之和均为素数,输出时从整数1开始,逆时针排列。同一个环应恰好输出一次。n<=16
  如输入:
6
输出:
1 4 3 2 5 6
1 6 5 2 3 4
代码:
 import java.util.Scanner;
 public class 素数环 {
     public static void main(String[] args) {
         Scanner sc = new Scanner(System.in);
         int n = sc.nextInt();
         int[] r = new int[n];
         r[0] = 1;
         dfs(n, r, 1);
     }
     private static void dfs(int n, int[] r, int cur) {
         if (cur == n && isP(r[0] + r[n - 1])) {// 填到末尾了,还有首尾相加为素数才算成功
             print(r);
             return;
         }
         for (int i = 2; i <= n; i++) {// 尝试用每个数字填到cur这个位置
             if (check(r, i, cur)) {// r中没有i这个数,且和上一个数之和为素数
                 r[cur] = i;// 试着将i放在cur位置,往前走一步
                 dfs(n, r, cur + 1);
                 r[cur] = 0;// 回溯 这里回不回溯都可以
             }
         }
     }
     private static void print(int[] r) {
         for (int i = 0; i < r.length; i++) {
             System.out.print(r[i] + (i == r.length - 1 ? "" : " "));
         }
         System.out.println();
     }
     private static boolean check(int[] r, int i, int cur) {
         for (int e : r) {
             if (e == i || !isP(r[cur - 1] + i))
                 return false;
         }
         return true;
     }
     private static boolean isP(int k) {
         for (int i = 2; i * i <= k; i++) {
             if (k % i == 0)
                 return false;
         }
         return true;
     }
 }
结果:
  
【DFS】素数环问题的更多相关文章
- Hdu 1016 Prime Ring Problem (素数环经典dfs)
		
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
 - UVA 524 素数环 【dfs/回溯法】
		
Description A ring is composed of n (even number) circles as shown in diagram. Put natural numbers ...
 - 素数环问题[XDU1010]
		
Problem 1010 - 素数环问题 Time Limit: 1000MS Memory Limit: 65536KB Difficulty: Total Submit: 972 Acc ...
 - Prime Ring Problem  +   nyoj 素数环  +  Oil Deposits  +  Red and Black
		
Prime Ring Problem Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) ...
 - nyist 488 素数环(搜索+回溯)
		
 素数环 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描写叙述 有一个整数n,把从1到n的数字无反复的排列成环,且使每相邻两个数(包含首尾)的和都为素数,称为素数环. ...
 - HDU 1016 Prime Ring Problem(素数环问题)
		
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...
 - Atcoder Grand Contest 032C(欧拉回路,DFS判环)
		
#include<bits/stdc++.h>using namespace std;int vis[100007];vector<int>v[100007];vector&l ...
 - 素数环 南阳acm488(回溯法)
		
素数环 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简 ...
 - # 「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程)
		
「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程) 题链 题意:n条边n个节点的连通图,边权为两个节点的权值之和,没有「自环」或「重边」,给出的图中有且只有一个包括奇数个结点的环 ...
 
随机推荐
- python面试题---收藏的笔记
			
第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C++等其他语言的对比? 简述解释型和编译型编程语言? P ...
 - Python用可变参数找出最大值和最小值
			
# 方法一 利用max min 函数. 注意这里max min 分别都是功能函数 def main_m(*args): i = max(args) j = min(args) print(" ...
 - 论文阅读笔记五十三:Libra R-CNN: Towards Balanced Learning for Object Detection(CVPR2019)
			
论文原址:https://arxiv.org/pdf/1904.02701.pdf github:https://github.com/OceanPang/Libra_R-CNN 摘要 相比模型的结构 ...
 - 关于Python 解包,你需要知道的一切
			
解包在英文里叫做 Unpacking,就是将容器里面的元素逐个取出来(防杠精:此处描述并不严谨,因为容器中的元素并没有发生改变)放在其它地方,好比你老婆去菜市场买了一袋苹果回来分别发给家里的每个成员, ...
 - Python脚本日志系统
			
Python通过logging模块提供日志功能,关于logging模块的使用网络上已经有很多详细的资料,这里要分享的是怎样在实际工程中使用日志功能. 假设要开发一个自动化脚本工具,工程结构如下,Com ...
 - 2018-2019-2 网络对抗技术 20165206 Exp6 信息搜集与漏洞扫描
			
- 2018-2019-2 网络对抗技术 20165206 Exp6 信息搜集与漏洞扫描 - 实验任务 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口 ...
 - Python Trick —— 命令行显示
			
1 应用场景 在命令行展示下,有以下两种场景. 进度条显示.在同一行展示不断的更新的进度条. 信息显示/隐藏控制.比如希望向多个用户展示不同信息,各个用户彼此保密. 2 进度条展示 跟c语言类似,打印 ...
 - pyspark如何遍历broadcast
			
因为论文关系要用到pyspark,具体情形如下: 有一个list=['aaa','bbb','ccc','ddd'],然后有一个rdd内数据类型是str,eg:'abcdefg',正常如果是需要筛选数 ...
 - session的创建和销毁时间
			
什么时候创建session ? 在你的服务器端发现没有该客户端的session,那么创建 什么时候销毁? 1.关闭客户端的时候 2.手动销毁 3.过期
 - babel分析
			
现在都用 ES6 新语法以及 ES7 新特性来写应用了,但是浏览器和相关的环境还不能友好的支持,需要用到 Babel 转码器来转换成 ES5 的代码 相信大家都看到过如下的名词: babel-pres ...