如何基于java語言實現(xiàn)八皇后問題
這篇文章主要介紹了如何基于java語言實現(xiàn)八皇后問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
八皇后問題,在一個8X8的棋盤中,放置八個棋子,每個棋子的上下左右,左上左下,右上右下方向上不得有其他棋子。正確答案為92中,接下來用java語言實現(xiàn)。
代碼如下
package eightQuen;
/**
* 八皇后問題
*
* @author 83771
*
*/
public class eight {
// 定義一個數(shù)組 表示棋盤
public static Integer[][] checkerBoard = new Integer[8][8];
// 棋盤副本
public static Integer[][] checkerBoardCopy = new Integer[8][8];
// 計數(shù)器 用于計數(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;
// 初始化一個棋盤 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 進(jìn)行下一次判斷
checkerBoardCopy[row][col] = 0;
}
}
// 檢查是否危險
// 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) {
// 若為真 增此點的值賦為1
checkerBoardCopy[row][col] = 1;
// 如果已經(jīng)判斷到最后一行 并且最后一行也符合情況 打印整個棋盤
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后可直接運行。 記一下這次的代碼。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA部署JavaWeb項目到Tomcat服務(wù)器的方法
這篇文章主要介紹了IDEA部署JavaWeb項目到Tomcat服務(wù)器的方法,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-06-06
Intellij IDEA集成JProfiler性能分析工具
作為Java程序員,性能分析是我們必須掌握的技能之一,在性能分析中,JProfiler是一款非常強大的工具,本文就來介紹一下Intellij IDEA集成JProfiler性能分析工具,就有一定的參考價值,感興趣的可以了解一下2023-12-12
IDEA創(chuàng)建Java?Web項目的超詳細(xì)圖文教學(xué)
IDEA是程序員們常用的java集成開發(fā)環(huán)境,也是被公認(rèn)為最好用的java開發(fā)工具,下面這篇文章主要給大家介紹了關(guān)于IDEA創(chuàng)建Java?Web項目的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12

