N皇后问题

题目描述:


N皇后问题_牛客网
N皇后问题是指在N*N的棋盘上要摆N个皇后,要求任何两个皇后不同行,不同列也不再同一条斜线上,求给一个整数n,返回n皇后的摆法。


输入描述:

输入一个整数,代表n(1≤n≤14)

输出描述:

输出一个整数,代表n皇后的种数。

输入示例1:

1

输出示例1:

1

输入示例2:

8

输出示例2:

92

题目分析:


这道题呢,典型的递归回溯。(虽然典型,但是我不会啊哈哈。)我的理解呢,就是一行一行的去递归求解,对于每行的列数据挨个去尝试,当然啦,尝试的时候要标志哪些列、对角线不能再放。尝试完之后要把之前的标志清掉,便于下个可能解的递归。具体代码如下~


代码实现:

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
public class Main{
    private static int count;
    private static boolean[] markcol;
    private static boolean[] mark45;
    private static boolean[] mark135;
    private static int n;
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        count=0;
        boolean[][] grid=new boolean[n][n];
        markcol=new boolean[n];
        mark45=new boolean[2*n-1];
        mark135=new boolean[2*n-1];
        backtracking(0);
        System.out.println(count);
    }
    
    public static void backtracking(int row){
        if(row==n){
            count++;
            return;
        }
        for(int col=0;col<n;col++){
            if(markcol[col]||mark45[row+col]||mark135[n-1-row+col])
                continue;
            markcol[col]=mark45[row+col]=mark135[n-1-row+col]=true;
            backtracking(row+1);
            markcol[col]=mark45[row+col]=mark135[n-1-row+col]=false;
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容