DFS算法求解素数环问题
问题描述
输入正整数n,把整数1,2,3,…,n组成一个环,使得相邻两个整数之和均为素数,输出从整数1开始逆时针排列。
同一个环应该只输出一次。n<=16.
问题分析
该问题可以有多种求解算法,本次使用DFS算法求解。
算法设计
package com.bean.algorithmbasic;
import java.util.Arrays;
import java.util.Scanner;
public class PrimeCircleDemo {
/*
* 输入正整数n,把整数1,2,3,...,n组成一个环,
* 使得相邻两个整数之和均为素数,输出从整数1开始逆时针排列。
* 同一个环应该只输出一次。n<=16.
* */
public static void dfsSearch(int[] res, int[] visited, int n, int cursor) {
if (cursor == n && isPrime(res[0] + res[n - 1])) {
StringBuffer str = new StringBuffer();
for (int i : res) {
str.append(i + " ");
}
System.out.println(str.substring(0, str.length() - 1));
return;
}
for (int i = 2; i <= n; i++) {
if (visited[i - 1] == 0) {
if (cursor > 0) {
if (!isPrime(i + res[cursor - 1]))
cont