日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

用java实现八皇后问题_使用java语言实现八皇后问题

發(fā)布時(shí)間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用java实现八皇后问题_使用java语言实现八皇后问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

八皇后問(wèn)題,在一個(gè)8X8的棋盤中,放置八個(gè)棋子,每個(gè)棋子的上下左右,左上左下,右上右下方向上不得有其他棋子。正確答案為92中,接下來(lái)用java語(yǔ)言實(shí)現(xiàn)。

解:

package eightQuen;

/**

* 八皇后問(wèn)題

*

* @author 83771

*

*/

public class eight {

// 定義一個(gè)數(shù)組 表示棋盤

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

// 棋盤副本

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

// 計(jì)數(shù)器 用于計(jì)數(shù)有多少種方法

public static Integer jishu = 1;

// 定義橫豎斜方向上是否有棋子

public static boolean flag1 = true;

public static boolean flag2 = true;

public static boolean flag3 = true;

public static boolean flag4 = true;

// 初始化一個(gè)棋盤 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;

}

// 遞歸測(cè)試方法

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 進(jìn)行下一次判斷

checkerBoardCopy[row][col] = 0;

}

}

// 檢查是否危險(xiǎn)

// row行

// col列

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

flag1 = true;

flag2 = true;

flag3 = true;

flag4 = 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) {

// 若為真 增此點(diǎn)的值賦為1

checkerBoardCopy[row][col] = 1;

// 如果已經(jīng)判斷到最后一行 并且最后一行也符合情況 打印整個(gè)棋盤

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后可直接運(yùn)行。 記一下這次的代碼。

總結(jié)

以上是生活随笔為你收集整理的用java实现八皇后问题_使用java语言实现八皇后问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。