美文网首页
42、全排列变种之八皇后

42、全排列变种之八皇后

作者: GIndoc | 来源:发表于2019-10-30 19:29 被阅读0次

题目:在8x8对国际象棋上摆放8个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列、同一对角线上。如图是一种结果:

image.png

请问有多少种符合条件的摆法?

解法:就是全排列,只是对排列结果进行判断,是否满足给定条件。
可以定义一个数组columnIndex[8],下标代表所处的行数,值代表所处的列数,如columnIndex[0]=2表示,第0行第2列。对数组进行全排列,排列后的数组如果任意两行i、j都满足i-j==columnIndex[i] - columnIndex[j]j-i == columnIndex[i]-columnIndex[j],则将数组加入结果集中。

    private List<List<Integer>> internationalQueue() {
        int[] columnIndex = new int[]{0, 1, 2, 3, 4, 5, 6, 7};
        List<List<Integer>> result = new ArrayList<>();
        queuePermutation(result, columnIndex, 0);
        return result;
    }

    private void queuePermutation(List<List<Integer>> result, int[] nums, int index) {
        if (index >= nums.length) {
            for (int i = 0; i < nums.length; ++i) {
                for (int j = i+1; j < nums.length; ++j) {
                    if (j - i == Math.abs(nums[j] - nums[i])) {
                        return;
                    }
                }
            }
            List<Integer> numbers = new ArrayList<>();
            for (int num : nums) {
                numbers.add(num);
            }
            result.add(numbers);
        } else {
            for (int i = index; i < nums.length; ++i) {
                if (i == index || nums[i] != nums[index]) {
                    int temp = nums[i];
                    nums[i] = nums[index];
                    nums[index] = temp;

                    queuePermutation(result, nums, index + 1);

                    temp = nums[i];
                    nums[i] = nums[index];
                    nums[index] = temp;
                }
            }
        }
    }

相关文章

  • 42、全排列变种之八皇后

    题目:在8x8对国际象棋上摆放8个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列、同一对角线上。如图...

  • iOS-数组的全排列

    百度百科链接 - 全排列 序言 数组的全排列可用于求解八皇后问题。与此同时,全排列经常会出现在笔试或者面试,如求字...

  • 八皇后问题

    最近接触到八皇后问题,看了下其中一种思路还挺简单,就是全排列然后筛选出斜边也满足的排列方法。比较麻烦的是全排列,特...

  • 全排列 n皇后

    输入一个字符串打印出这个字符串的全排列,剑指上面是字符串没有重复字母的,牛客上面输入有重复字母,要求搞掉重复的排列...

  • 41、全排列变种之正方体

    题目:输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放在正方体的8个顶点上,使得正方体上三组相对的面上...

  • 基础之全排列

    很基本的算法,使用DFS实现

  • 递归之全排列

    一般把1~n这n个整数按某个顺序摆放的结果称为这n个整数的一个排列,全排列是指这n个整数能形成的所有排列。不妨设定...

  • Permutations

    求一个数组的全排列。 遇到的问题: 1.忘记了字典序排列的定义;2.思考时间过长;3.没有及时找到全排列和字典序之...

  • 全排列与字典序

    全排列 递归实现全排列; 首先来说递归算法实现全排列: 例如,对于{1,2,3,4}的例子进行全排列,其可以分解...

  • 算法简记- 全排

    1、// 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 回溯 2、// n 皇后问题 研究的是如何将...

网友评论

      本文标题:42、全排列变种之八皇后

      本文链接:https://www.haomeiwen.com/subject/tyjavctx.html