前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >N皇后问题

N皇后问题

作者头像
用户8785253
发布2021-07-06 14:54:52
3280
发布2021-07-06 14:54:52
举报
文章被收录于专栏:JAVA学习历程JAVA学习历程

N皇后问题,也是用递归的方式来解,不一样的是,要加一个record记录之前的皇后的位置来确定之后的皇后放的位置对不对

代码语言:javascript
复制
import java.util.ConcurrentModificationException;

public class NQueens {
    public static void main(String[] args) {
        NQueens nQueens = new NQueens();
        System.out.println(nQueens.num(10));
    }
    public static int num(int n){
        if (n<=0){
            return 0;
        }
        int[] record=new int[n];
        return process(0,record,n);
    }
    //潜台词record[0...i-1]的所有皇后不共行,不共列
    //目前来到了第i行
    //n代表整体一共有多少行
    //返回值是摆完所有的皇后,合理的摆法有多少种
    public static int process(int i,int[] record,int n){
        if (i==n){//到达了中止行
            return 1;
        }
        int res=0;
        for (int j=0;j<n;j++){//当前行在i行,尝试i行的每一列
            if(isValid(record,i,j)){
                record[i]=j;
                res+=process(i+1,record,n);
            }
        }
        return res;
    }

    private static boolean isValid(int[] record, int i, int j) {
        for (int k=0;k<i;k++){
            if (j==record[k]||Math.abs(k-i)==Math.abs(record[k]-j)){
                return false;
            }

        }
        return true;
    }


}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-05-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档