美文网首页
2n皇后问题

2n皇后问题

作者: beautymo | 来源:发表于2018-03-31 11:56 被阅读0次

题目描述:


Y9J{PKX{Q~5KR)(KTSR22LO.png

解决方法:
递归+回溯
先铺上一层皇后,再铺一层

import java.util.*;
// 2n皇后自己写系列
public class Queen {
    static int count,n;
    static int[][] map;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        map = new int[n][n];  // 记得要将map实例化
        // 将输入数组值放入map
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                map[i][j] = sc.nextInt();
            }
        }
        // 假设放置白皇后的地方放2,放置黑皇后的地方放3
        put(0,2);
        System.out.println(count);
    }
    public static void put(int t,int s){
        if( t == n){ // 表示白皇后已经放完
            if(s == 2) put(0,3); // 此时开始放置黑皇后
            else count++;  // 如果黑皇后也已经放置完,count++
            return;
        }
        //  挨层放
        for( int i = 0; i < n; i++){ 
            if( map[t][i] != 1) continue; // 该位置不可放任何皇后 结束本次循环
            if(check(t,i,s)) map[t][i] = s; // 如果该位置可以放 那么放置皇后
            else continue;  // 该位置不可放置 结束本次循环
            put(t+1,s); // 该层放置成功,则开始放置下一层
            map[t][i] = 1;  // 回溯,如果下一层放置不成功,则回溯,如果两种皇后都放置成功,则测试下一种可能性
        }
        return;
    }
    public static boolean check(int t, int i,int s){
        for(int q = t-1; q >= 0; q--){    // 测试该列是否已经放置了皇后
            if(map[q][i] == s) return false;
        }
        for(int q = t-1,p = i-1; q >=0 && p >= 0;q--,p--){ // 测试左对角线是否已经放置了皇后
            if(map[q][p] == s) return false;
        }
        for(int q = t-1,p = i+1; q >= 0&& p < n;q--,p++){ // 测试右对角线是否已经放置了皇后
            if(map[q][p] == s) return false;
        }
        return true;
    }

}

相关文章

  • 2n皇后问题

    题目描述: 解决方法:递归+回溯先铺上一层皇后,再铺一层

  • 第16章 抽象深度优先搜索

    1、2n皇后问题 算法分析 与n皇后问题类似,如下是n皇后问题的分析,时间复杂度 按行继续比遍历,其中col[x]...

  • 优质题解:2n皇后问题

    原题链接:[蓝桥杯][基础练习VIP]2n皇后问题 解题思路:首先理解八皇后,然后就是一个使用两个八皇后叠加的问题...

  • 1803: 2n皇后问题

    Time Limit:1 SecMemory Limit:128 MB Submit:34Solved:26 [S...

  • 基础练习 2n皇后问题

    问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个...

  • LeetCode笔记:561. Array Partition

    问题(Easy): Given an array of 2n integers, your task is to ...

  • LeetCode之N-Repeated Element in S

    问题:In a array A of size 2N, there are N+1 unique elements...

  • 3个月熟练使用python--Day3打卡

    1、电影院买票问题 问题:2n个人排队进电影院,票价是50元。在这2n个人当中,其中n个人只有50元,另外n个人只...

  • 八皇后问题(N皇后问题)

    八皇后问题是一个经典的递归回溯问题。 描述 八皇后问题是在一个 8*8 的棋盘上放置皇后,要求其放置后满足同一行,...

  • 皇后问题

    经常做算法赛题的朋友们都知道,八皇后问题是一道经典的搜索回溯题。简单来说,皇后问题就是在一个国际象棋棋盘上摆放若干...

网友评论

      本文标题:2n皇后问题

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