如何基于java语言实现八皇后问题

网友投稿 254 2022-12-19


如何基于java语言实现八皇后问题

这篇文章主要介绍了如何基于java语言实现八皇后问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子。正确答案为92中,接下来用java语言实现。

代码如下

package eightQuen;

/**

* 八皇后问题

*

* @author 83771

*

*/

public class eight {

// 定义一个数组 表示棋盘

public static Integer[][] checkerBoard = new Integer[8][8];

// 棋盘副本

public static Integer[][] checkerBoardCopy = new Integer[8][8];

// 计数器 用于计数有多少种方法

public static IntegerBtLVlCZr jishu = 1;

// 定义横竖斜方向上是否有棋子

public static boolean flag1 = true;

public static boolean flag2 = true;

public static boolean flag3 = true;

public static boolean flag4 = true;

// 初始化一个棋盘 8x8

public static void init() {

for (int i = 0; i < 8; i++) {

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

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

checkerBoard[i][j] = 0;

}

System.out.println();

}

checkerBoardCopy = checkerBoard;

}

// 递归测试方法

public static void startTest(int row) {

for (int col = 0; col < 8; col++) {

if (checkCheet(row, col, checkerBoardCopy) == 1) {

if (row < 7) {

startTest(++row);

--row;

}

}

// 该行重新赋值为0 进行下一次判断

checkerBoardCopy[row][col] = 0;

}

}

// 检查是否危险

// row行

// col列

public static int checkCheet(int row, int col, Integer[][] checkerBoardCopy) {

flag1 = true;

flag2 = true;

flag3 = true;

flag4 http://= true;

// 行方向上是否满足条件

for (int i = 0; i < 8; i++) {

if (checkerBoardCopy[row][i] == 1) {

flag1 = false;

break;

}

}

// 列方向上是否满足条件

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

if (checkerBoardCopy[j][col] == 1) {

flag2 = false;

break;

}

}

// 右下方向

for (int i = row, j = col; i < 8 & j < 8; i++, j++) {

if (checkerBoardCopy[i][j] == 1) {

flag3 = false;

break;

}

}

// 左上方向

for (int i = row, j = col; i >= 0 & j >= 0; i--, j--) {

if (checkerBoardCopy[i][j] == 1) {

flag3 = false;

break;

}

}

// 左下方向

for (int i = row, j = col; i < 8 & j >= 0; i++, j--) {

if (checkerBoardCopy[i][j] == 1) {

flag4 = false;

break;

}

}

// 右上方向

for (int i = row, j = col; i >= 0 & j < 8; i--, j++) {

if (checkerBoardCopy[i][j] == 1) {

flag4 = false;

break;

}

}

if (flag1 & flag2 & flag3 & flag4) {

// 若为真 增此点的值赋为1

checkerBoardCopy[row][col] = 1;

// 如果已经判断到最后一行 并且最后一行也符合情况 打印整个棋盘

if (row == 7) {

printCheets(checkerBoardCopy);

}

return 1;

}

return 0;

}

// 打印棋盘方法

public static void printCheets(Integer[][] checkerBoardCopy) {

for (int i = 0; i < 8; i++) {

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

System.out.print(checkerBoardCopy[i][j] + " ");

}

System.out.println();

}

System.out.println("=================" + jishu++);

}

public static void main(String[] args) {

init();

startTest(0);

}

}

copy后可直接运行。 记一下这次的代码。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Mybatis多线程下如何使用Example详解
下一篇:java实现图片滑动验证(包含前端代码)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~