42、全排列变种之八皇后

题目:在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;
                }
            }
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 14,673评论 0 89
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,712评论 0 2
  • 计算机二级C语言上机题库(南开版) 1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平...
    MrSunbeam阅读 11,526评论 1 42
  • 命运是一个词,“命”、“运”是两个字。 “命”:包括DNA,包括出生的家庭、出生时间,亦包括之后的生活、工作环境,...
    李疯子阅读 2,910评论 0 0
  • 桃花远去倦姿妍,平平仄仄仄平平韵 梦系游丝细雨溅。仄仄平平仄仄平韵 锦鲤龙门寻巨浪,仄仄平平平仄仄句 白蛇下界觅良...
    揽月妖星阅读 2,144评论 0 2