问题描述:在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

分享到:

2011-10-19 20:51

浏览 1957

评论

n皇后问题java_经典n皇后问题java代码实现相关推荐

  1. 八皇后java_经典八皇后问题:Java语言

    问题描述:将八个皇后放在棋盘上,任何两个皇后都不能互相攻击(即没有任何两个皇后在同一行.同一列或者同一对角线上)如图所示,题目来自于<java语言程序设计:基础篇>练习题6.20和6.22 ...

  2. 守望者逃离 java_守望者的逃离 (Java代码)

    解题思路: 注意事项: 参考代码: import java.util.Scanner; public class Main{ public static void main(String[]ages) ...

  3. 表示我想你的代码java_如何编写可怕的Java代码?

    我决定告诉你如何编写可怕的Java代码.如果你厌倦了所有这些美丽的设计模式和最佳实践,并且想写些疯狂的东西,请继续阅读. 如果你正在寻找有关如何编写良好代码的建议,请查看其它文章! 对一切使用异常 你 ...

  4. 罪恶都市洛杉矶java_「洛杉矶时间」Java代码获取美国洛杉矶的时间 - seo实验室...

    洛杉矶时间 TimeZone time1 = TimeZone.getTimeZone("America/Los_Angeles"); Date today1 = calendar ...

  5. stopwatch java_利用StopWatch类监控Java代码执行时间并分析性能

    springframework中的StopWatch类可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.一般用来测量代码执行所用的时间或者计算性能数据,在优化代码性能上可以使用Sto ...

  6. 选址问题java_邮局选址问题 (Java代码)

    解题思路: 注意事项: 参考代码:import java.util.Scanner; public class A1262 { public static void main(String args[ ...

  7. pmd java_用PMD自动执行Java代码静态分析

    一起学习 一.基础知识 PMD是一种分析Java代码错误的工具.与其他分析工具不同的是,PMD通过静态分析获知代码错误.也就是说,在不运行Java程序的情况下报告错误.PMD附带了许多可以直接使用的规 ...

  8. Java黑皮书课后题第7章:***7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行、同列、同一对角线)。编写程序显示一个解决方案

    7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行.同列.同一对角线).编写程序显示一个解决方案 题目 题目描述 破题 题目 题目描述 ...

  9. 三种算法求解经典N皇后问题

    三种算法求解经典N皇后问题 [问题描述] 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击, ...

最新文章

  1. codevs 4560 NOIP2015 D2T2 子串
  2. php中 可替代curl,laravel-PHP-为什么使用Guzzle代替cURL?
  3. 牛客小白月赛37【部分题解】
  4. 使用redis的zset实现排行榜
  5. python debug
  6. mysql sqlsugar_.net core +mysqlSugar(最为简单的增删改查)
  7. Vue.js仿QQ音乐(移动端)
  8. 亚信安全认证acse_安全世界 5正当时 | 邀您共启”2020第五空间战略发展高峰论坛”...
  9. 关于weight decay
  10. vue项目中金额小写转换为汉字大写的功能封装
  11. 【STM32学习笔记】(7)——STM32时钟系统详解
  12. fastdfs连接mysql_使用fastdfs-zyc监控FastDFS文件系统
  13. Java开发erp系统,高级面试题+解析
  14. 再次登顶GitHub,阿里内网首次自曝炫彩版微服务响应式与K8S手册
  15. 移动端切图内容包括什么_移动终端界面切图
  16. Android利用谷歌地图获取并解析经纬度对应的地理位置
  17. Unity网格系统(1)网格生成
  18. 云计算,社交网络,移动互联网
  19. 华南理工大学(计算机技术)往年(?- 2019)专业面试题总结
  20. 无线路由器设置成无线AP,解决家里设备不在一个网段的尴尬

热门文章

  1. Android Studio设置
  2. 2013科目三道路驾驶技能通用评判标准
  3. 广州驾校考试实际道路考试注意事项(图)
  4. 切记!这样洗头最伤身
  5. 浅谈:国内软件公司为何无法做大做强?
  6. 编程语言API性能大比拼
  7. 【ffmpeg for wince】音视频编解码多平台移植(for window/wince)
  8. awk 中 {print $1} 什么意思
  9. Duplicate entry ‘XXX‘ for key
  10. USACO Training Section 5.1 Fencing the Cows 圈奶牛(凸包)