题解 | #游游的排列统计#

游游的排列统计

http://www.nowcoder.com/questionTerminal/4c58fc41f25d4598913ceda30e66bf01

排列型回溯
有限制条件(当前所选数字 + 前一个选择的数字 不等于素数)下枚举选哪个数字即可
import java.util.*;

public class Main {
    private static int[] path;
    private static boolean[] visited; // visited[i]表示数字i是否被使用过
    private static int n;
    private static int ans;

    private static void dfs(int i) {
        if (i == n) {
            ans++;
            return;
        }

        for (int j = 1; j <= n; j++) {
            if (!visited[j]) {
                if (i > 0) {
                    if (!isPrime(path[i - 1] + j)) {
                        visited[j] = true;
                        path[i] = j;
                        dfs(i + 1);
                        visited[j] = false;
                    }
                } else {
                    visited[j] = true;
                    path[i] = j;
                    dfs(i + 1);
                    visited[j] = false;
                }
            }
        }
    }

    private static boolean isPrime(int num) {
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        path = new int[n];
        visited = new boolean[n + 1];
        dfs(0);
        System.out.println(ans);      
        }
}


全部评论

相关推荐

在看数据的傻狍子很忙碌:学生思维好重,而心很急,自己想想真的能直接做有难度的东西吗?任何错误都是需要人担责的,你实习生可以跑路,你的同事领导呢
点赞 评论 收藏
分享
勤劳的鲸鱼在okr拆解:没有别的选择就去吧,有实习和没实习找工作是天上地下
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务