比较简单,废话不说,上代码:

public class NQueen {
    //比如:position[1]=3,表示第一行的第三列有一个皇后
    private int [] position;
    //总的方法数量
    private int total;
    private int numOfQueens;
    public NQueen(int n) throws Exception
    {
        if(n<0)
            throw new Exception("can not be negative...");
        else
        {
            //position[0]不用
            position= new int[n+1];
            numOfQueens = n;
            total = 0;
        }

    }
    public int nQueen()
    {
        putQueen(1);
        return total;
    }
    //在第row行放一个queen
    private void putQueen(int row)
    {
        if(row==numOfQueens+1)
        {
            total++;
            return;
        }
        //遍历第row行放置皇后的所有的可能性
        for(int i=1;i<=numOfQueens;i++)
        {
            position[row]=i;
            //如果放的合理
            if(checkIfValid(row))
                putQueen(row+1);//则递归求解
        }
    }
    //检查放的是否合理
    private boolean checkIfValid(int row)
    {
        if(row==1)
            return true;
        for(int i=1;i<row;i++)
        {
            if(!check(i,row))
                return false;
        }
        return true;
    }
    private boolean check(int a,int b)
    {
        if(position[a]==position[b] ||
                (a-b)==(position[a]-position[b]) ||
                        (a-b)==-1*(position[a]-position[b]))
            return false;
        return true;
    }
    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        NQueen nq = new NQueen(8);
        System.out.println(nq.nQueen());
        // TODO Auto-generated method stub

    }

}

N皇后问题——递归求解的更多相关文章

  1. YTU 3013: 皇后问题(递归)

    3013: 皇后问题(递归) 时间限制: 1 Sec  内存限制: 128 MB 提交: 2  解决: 2 题目描述 编写一个函数,求解皇后问题:在n*n的方格棋盘上,放置n个皇后,要求每个皇后不同行 ...

  2. C++递归求解N个元素的所有子集

    C++递归求解N个元素的所有子集 引言: 我在复习C++遇到了设计递归函数的问题.这个例子,很好的显示了设计递归的方式,思想. 这与斐波那数列不同,这个例子更有应用意义. 问题: 试编写一个递归函数, ...

  3. HDU 5694——BD String——————【递归求解】

    BD String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  4. hdu 1588(矩阵好题+递归求解等比数列)

    Gauss Fibonacci Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  5. N皇后问题【递归求解】

    n皇后问题:输入整数n, 要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击,输出全部方案. 输入一个正整数N,则程序输出N皇后问题的全部摆法.输出结果里的每一行都代表一种摆法.行里的第i个数字 ...

  6. java实现八皇后问题(递归和循环两种方式)

    循环方式: package EightQueens;   public class EightQueensNotRecursive { private static final boolean AVA ...

  7. 八皇后问题 递归实现 C语言 超详细 思路 基础

    八皇后问题 :假设 將八个皇后放到国际象棋盘上,使其两两之间无法相互攻击.共有几种摆法? 基础知识: 国际象棋里,棋盘为8X8格. 皇后每步可以沿直线.斜线 走任意格. 思路: 1.想把8个皇后放进去 ...

  8. [LeetCode系列]N皇后问题递归解法 -- 位操作方式

    N皇后问题: 给定8*8棋盘, 放置n个皇后, 使其互相不能攻击(即2个皇后不能放在同一行/列/正反对角线上), 求解共有多少种放置方式? 这个问题的解答网上有不少, 但是位操作解法的我看到的不多. ...

  9. LeetCode OJ Minimum Depth of Binary Tree 递归求解

        题目URL:https://leetcode.com/problems/minimum-depth-of-binary-tree/ 111. Minimum Depth of Binary T ...

随机推荐

  1. HDU 1495 非常可乐 BFS

    题目大意:中文题不说了. 题目思路:我有同学用GCD数论写出来的代码很简洁,但是很抱歉,数论蒟蒻,我觉得比赛的时候我没办法推出.如果用BFS的话思路很简单的,就是6方向广搜,只不过稍微麻烦点.具体看代 ...

  2. POJ 1182 食物链 经典并查集+关系向量简单介绍

    题目: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有 ...

  3. PHP生成静态页面详解

    PHP生成静态页面详解 看到很多朋友在各个地方发帖问PHP生成静态文章系统的方法,以前曾做过这样一个系统,遂谈些看法,以供各位参考.好了,我们先回顾一些基本的概念. 一,PHP脚本与动态页面. PHP ...

  4. HDU 4738 Caocao's Bridges(割边)

    乍一看一个模板题,仔细一看还是模板题,但是三个坑.1,不是连通图,放0个.2 守卫为0,放1个. 3注意重边. #include<iostream> #include<cstdio& ...

  5. zookeeper实现分布式锁服务

    A distributed lock base on zookeeper. zookeeper是hadoop下面的一个子项目, 用来协调跟hadoop相关的一些分布式的框架, 如hadoop, hiv ...

  6. CentOS Hadoop安装配置详细

    总体思路,准备主从服务器,配置主服务器可以无密码SSH登录从服务器,解压安装JDK,解压安装Hadoop,配置hdfs.mapreduce等主从关系. 1.环境,3台CentOS7,64位,Hadoo ...

  7. 在MFC对话框中添加状态栏

    如果我们想实现在MFC对话框中添加状态栏显示,如何例如分状态栏为两列,第一列显示鼠标的当前位置,第二列显示当前的时间,(如上图). 1. 首先,打开在资源视图的String Table并添加两个ID: ...

  8. CD冷却效果实现

    在NGUI中实现CD转圈的特效,可以用图片控件中UISprite组件的Fill Amount属性去控制. 在上图中skill表示需要冷却技能的图片:其子控件Label表示右下角的快捷键“Y”:子控件S ...

  9. Leetcode389

    Find the Difference Given two strings s and t which consist of only lowercase letters. 给出两个字符串,s和t,都 ...

  10. hdu_5726_GCD(线段树维护区间+预处理)

    题目链接:hdu_5726_GCD 题意: 给你n个数(n<=1e5)然后m个询问(m<=1e5),每个询问一个区间,问你这个区间的GCD是多少,并且输出从1到n有多少个区间的GCD和这个 ...