n皇后问题java_经典n皇后问题java代码实现

问题描述:在n*n的二维表格,把n个皇后在表格上,要求同一行、同一列或同一斜线上不能有2个以上的皇后。

例如八皇后有92种解决方案,五皇后有10种解决方案。

public class TestQueen {

int n; //皇后的个数

int num = 0; // 记录方案数

int[] queenCol; // 记录n个皇后所占用的列号

boolean[] col; // 列安全标志

boolean[] diagonal; // 对角线安全标志

boolean[] undiagonal; // 反对角线安全标志

public TestQueen(int n) {

this.n = n;

queenCol = new int[n];

col = new boolean[n];

diagonal = new boolean[2 * n - 1];

undiagonal = new boolean[2 * n - 1];

for (int i = 0; i < n; i++)

// 置所有列为安全

col[i] = true;

for (int t = 0; t < (2 * n - 1); t++)

// 置所有对角线为安全

diagonal[t] = undiagonal[t] = true;

}

public void run() {

solve(0);

if (num == 0) {

System.out.println(n + "皇后无解!");

}

}

// 从i行开始,把之后的皇后放好

private void solve(int i) {

for (int j = 0; j < n; j++) {

if (col[j] && diagonal[i - j + n - 1] && undiagonal[i + j]) {

// 表示第i行第j列是安全的可以放皇后(i,j从0开始)

queenCol[i] = j;

col[j] = false; // 修改安全标志

diagonal[i - j + n - 1] = false;

undiagonal[i + j] = false;

if (i < n - 1) // 判断是否放完n个皇后

{

solve(i + 1); // 未放完n个皇后则继续放后面的

} else // 已经放完n个皇后

{

num++;

System.out.println("皇后摆放第" + num + "种方案:");

System.out.print("行分别为");

for (int k = 0; k < n; k++)

System.out.print(k + " ");

System.out.print("\n");

System.out.print("列分别为");

for (int k = 0; k < n; k++)

System.out.print(queenCol[k] + " ");

System.out.print("\n");

}

col[j] = true; // 修改安全标志,回溯

diagonal[i - j + n - 1] = true;

undiagonal[i + j] = true;

}

}

}

public static void main(String[] args) {

TestQueen q = new TestQueen(5);

q.run();

}

}

输出结果:

皇后摆放第1种方案:

行分别为0 1 2 3 4

列分别为0 2 4 1 3

皇后摆放第2种方案:

行分别为0 1 2 3 4

列分别为0 3 1 4 2

皇后摆放第3种方案:

行分别为0 1 2 3 4

列分别为1 3 0 2 4

皇后摆放第4种方案:

行分别为0 1 2 3 4

列分别为1 4 2 0 3

皇后摆放第5种方案:

行分别为0 1 2 3 4

列分别为2 0 3 1 4

皇后摆放第6种方案:

行分别为0 1 2 3 4

列分别为2 4 1 3 0

皇后摆放第7种方案:

行分别为0 1 2 3 4

列分别为3 0 2 4 1

皇后摆放第8种方案:

行分别为0 1 2 3 4

列分别为3 1 4 2 0

皇后摆放第9种方案:

行分别为0 1 2 3 4

列分别为4 1 3 0 2

皇后摆放第10种方案:

行分别为0 1 2 3 4

列分别为4 2 0 3 1

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2011-10-19 20:51

浏览 1957

评论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg mplayer x264 代码重点详解 详细分析

ffmpeg和mplayer中求平均值得方法 1 ordinary c language level #define avg2(a,b) ((ab1)>>1) #define avg4(a,b,c,d) ((abcd2)>>2) 显而易见&#xff0e;&#xff0e;&#xff0e;&#xff0c;注意a&#xff0c;b宏表达式可能引出的副作用 2 SIMD by software…

nagios监控服务器的搭建

nagios 概述&#xff1a; 开源的免费的网络监视工具。 监控&#xff1a; windows, Linux,Unix,交换机和路由器。报警。 Nagios是插件式的结构&#xff0c;它本身没有任何监控功能&#xff0c;所有的监控都是通过插件进行的&#xff0c;因此其是高度模块化和富于弹性的。Nagios…

BZOJ1031: [JSOI2007]字符加密Cipher

1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7882 Solved: 3425[Submit][Status][Discuss]Description 喜欢钻研问题的JS同学&#xff0c;最近又迷上了对加密方法的思考。一天&#xff0c;他突然想出了一种他认为是终极的加密办法&#…

java栈顶元素_栈在Java类库中的实现

栈是一种后进先出的数据结构。在它之上&#xff0c;主要有三种操作&#xff1a;(1)判断栈是否为空——empty()&#xff1b;(2)在栈顶添加一个元素——push(E)&#xff1b;(3)删除并返回栈顶元素——pop()。在Java类库中&#xff0c;Stack类实现了栈&#xff0c;它继承自Vector类…

LoadRunner远程监测Centos服务性能配置过程

由于公司的需要&#xff0c;经过一段时间的探索&#xff0c;参考了很多业内人士的文档&#xff0c;终于完成LoadRunner远程监测centos服务器的配置过程。 首先监测所需要服务是否存&#xff0c;如果存在就不必要安装&#xff0c;如果不存在&#xff0c;需要安装对应的服务。 监…

day 68 增删改查 语法

1 普通正则 2 分组正则 url(r/blog/(\d)/(\d),views.blog) blog(request,arq1,arq2) 按照位置传参 3 分组命名 url(r/blog/(?P<year>\d)/(?P<month>\d),views.blog) blog(request,year,month) 4 用name 指定别名 url(r/blog/(?P<year>\d)/(?P…

编译器入门 语法分析器 java_从零开始写个编译器吧 - Parser 语法分析器

Parser(语法分析器)的编写相对于 Tokenizer (词法分析器)要复杂得多&#xff0c;因此&#xff0c;在编写之前可能也会铺垫得更多一些。当然&#xff0c;本系列旨在“写出”一个编译器&#xff0c;所以理论方面只会简单介绍 tao 语言所涉及的部分。之前的几章中&#xff0c;我纯…

017——数组(十七) asort ksort rsort arsort krsort

<?php /*** 数组 asort ksort rsort arsort krsort*///asort()对数组按值排序&#xff0c;保留键名&#xff1a; /*$arrarray(bbs_url>bbs.lantian.com,web_url>www.lantian.com,bbs_name>免费视频教程,www_name>PHP项目开发, ); asort($arr); print_r($arr);…

v4l打开video设备 ,执行VIDIOC_DQBUF,出现Resource temporarily unavailable 问题

如果你在执行VIDIOC_DQBUF突然提示以下错误&#xff1a; error: VIDIOC_DQBUF: Resource temporarily unavailable 那么很可能是你使用非阻塞方式打开设备文件的造成的。 Resource temporarily unavailable是一种EAGAIN的错误。EAGAIN是较常见的一种错误(比如用在非阻塞操作…

ubuntu下无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

sudo apt-get install git E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/)&#xff0c;是否有其他进程正占用它&#xff1f; 当执行sudo apt-get相关的命令&#xff0c;会显示上面类似的错误 参考别人的解决方法是 sudo r…

java get方法不序列化_Java中的Json序列化,不容忽视的getter

在开发的过程中&#xff0c;经常会碰到和自己预期不一样的情况。有的时候自己去研究一下还是很有趣的。这两天在写java web的时候&#xff0c;碰到了一个对象序列化的问题。问题重现public class AjaxJson {private boolean success;private String msg;private Object obj;pri…

mysql 通过echo的方式写入数据库 中文乱码解决方案

echo "set names utf8;insert into xxx (path, sn, time, flag) values ($wav, $sn, $secs, op);" | MYSQL echo "set names utf8;insert into xxx (path, sn, time, flag) values ($wav, $sn, $secs, op);" 前面增加 set names utf8;

getParameter和getAttribute的区别

转自http://blog.csdn.net/java_xiaobin/article/details/45363897 1.getAttribute是取得jsp中 用setAttribute設定的attribute 2.parameter得到的是string&#xff1b;attribute得到的是object 3.request.getParameter()方法传递的数据&#xff0c;会从Web客户端传到Web服务器…

java int字母,从Java中获取int,也包含字母

How can I get the int value from a string such as 423e - i.e. a string that contains a number but also maybe a letter?Integer.parseInt() fails since the string must be entirely a number.解决方案Unless youre talking about base 16 numbers (for which theres …

Spring-data-jpa常用方法

转载于:https://www.cnblogs.com/summary-2017/p/7904926.html

面试问题汇总 精选 分析 解答 职业规划 part 1

C/C/C#面试题精选&#xff08;1&#xff09; 题目&#xff08;一&#xff09;&#xff1a;C中我们可以用static修饰一个类的成员函数&#xff0c;也可以用const修饰类的成员函数&#xff08;写在函数的最后表示不能修改成员变量&#xff0c;不是指写在前面表示返回值为常量&am…

java byte md5_Java开发网 - byte[]按自定义编码转换成String(MD5)

差不多了&#xff0c;这样应该就可以了&#xff0c;剩下的就是扩展能接受的类型了。import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class HashPasswords {public String getPassword(byte[] input) {byte[] digest;synchronized (…

Java线程生命周期

当你需要使用Java线程在多线程环境下进行编程时&#xff0c;理解Java的线程周期与线程的状态是非常重要的。通过实现Runnale接口或者继承Thread类&#xff0c;我们可以创建线程&#xff0c;为了启动一个线程&#xff0c;我们需要创建一个Thread对象&#xff0c;并且调用它的sta…

转,JSON解析2

JSON 使用讲解 这篇文章讲解了&#xff0c;JSON的介绍以及使用GSON解析。今天&#xff0c;我们就在Android项目中使用两种方式解析JSON数据。如果你对JSON&#xff0c;还不熟悉&#xff0c;那么请看JSON 使用讲解。 一.搭建服务以及制造JSON数据。 1.服务器选择的Tomcat&#x…

面试问题汇总 精选 分析 解答 职业规划 part 2

面试困惑问与答&#xff08;2&#xff09;——感觉挺好&#xff0c;为啥被拒了&#xff1f; 问&#xff1a;技术面试的时候&#xff0c;题目挺简单的&#xff0c;我觉得自己都做出来了。可最后怎么还是被拒了啊&#xff1f; 答&#xff1a;面试被拒有很多种可能&#xff0c;比…