public class Queen {
//Number of rows or columns
public static final int BOARD_SIZE = 8;
boolean[ ][ ] board;
//Indicate an empty square
public static final boolean EMPTY = false;
//Indicate a square which containing a queen
public static final boolean QUEEN = true;
//Number of moves
public static final int MOVES = 4;
//Horizontal moves
int[] horizontal;
//Vertical moves
int[] vertical;
public int queens = 0;
public Queen() {
//Constructor creates an empty board
board = new boolean[BOARD_SIZE][BOARD_SIZE];
for (int row = 0; row < board.length; row++) {
for (int col = 0; col < board[row].length; col++) {
board[row][col] = EMPTY;
}
}
horizontal = new int[MOVES];
vertical = new int[MOVES];
// up right
horizontal[0] = -1;
vertical[0] = 1;
// down left
horizontal[1] = 1;
vertical[1] = -1;
// up left
horizontal[2] = -1;
vertical[2] = -1;
// down right
horizontal[3] = 1;
vertical[3] = 1;
}
public boolean placeQueens (int column) {
if (column > BOARD_SIZE) {
return true;
}
else {
boolean queenPlaced = false;
int row = 1;
while (!queenPlaced && row < BOARD_SIZE) {
if (isUnderAttack(row, column)) {
++row;
}// end if
else{
setQueen(row, column);
queenPlaced = placeQueens(column + 1);
if (!queenPlaced) {
removeQueen(row,column);
++row;
}// end if
}// end else
}// end while
return queenPlaced;
}// end else
}
private void removeQueen(int row, int column) {
board[row][column] = EMPTY;
System.out.printf("queen REMOVED from [%d][%d]
", row, column);
--queens;
}
private void setQueen(int row, int column) {
board[row][column] = QUEEN;
System.out.printf("queen PLACED in [%d][%d]
", row, column);
++queens;
}
public boolean isUnderAttack(int row, int col) {
boolean condition = false;
// check row
for (int column = 0; column < BOARD_SIZE; column++) {
if ((board[row][column] == true)) {
condition = true;
}
}
// check column
for (int row_ = 0; row_ < board.length; row_++) {
if (board[row_][col] == true) {
condition = true;
}
}
// check diagonal
for (int row_ = row, col_ = col; row_ >= 0 && col_ < 8; row_ += horizontal[0], col_ += vertical[0]) {
if (board[row_][col_] == true) {
condition = true;
}
}
for (int row_ = row, col_ = col; row_ < 8 && col_ >= 0; row_ += horizontal[1], col_ += vertical[1]) {
if (board[row_][col_] == true) {
condition = true;
}
}
for (int row_ = row, col_ = col; row_ >= 0 && col_ >= 0; row_ += horizontal[2], col_ += vertical[2]) {
if (board[row_][col_] == true) {
condition = true;
}
}
for (int row_ = row, col_ = col; row_ < 8 && col_ < 8; row_ += horizontal[3], col_ += vertical[3]) {
if (board[row_][col_] == true) {
condition = true;
}
}
return condition;
}
public void displayBoard () {
int counter = 0;
for (int row = 0; row < board.length; row++) {
for (int col = 0; col < board[row].length; col++) {
if (board[row][col] == true) {
System.out.printf("|%s|", "x");
counter++;
}
else {
System.out.printf("|%s|", "o");
}
}
System.out.println();
}
System.out.printf("%d queens has been placed
", counter);
}
public static void main(String[] args) {
// TODO code application logic here
System.out.printf("TEST
");
return;
}
}
คลาสาธารณะควีน{ จำนวนของแถวหรือคอลัมน์ สุดท้าย int สาธารณะคง BOARD_SIZE = 8 บูลีน [] [] กระดาน ระบุตารางว่างเปล่า สาธารณะคงว่างบูสุดท้าย =เท็จ ระบุตารางที่ประกอบด้วยพระราชินี สาธารณะคงควีนบูสุดท้าย =จริง ย้าย ย้ายสาธารณะคงสุดท้าย int = 4 ย้ายแนวนอน แนวนอน int] ย้ายแนวตั้ง แนวตั้ง int] ควีนส์ int สาธารณะ = 0 {Queen() สาธารณะ ตัวสร้างสร้างกระดานว่างเปล่า คณะ =บูลีนใหม่ [BOARD_SIZE] [BOARD_SIZE]; สำหรับ (int แถว = 0 แถว < board.length แถว ++) { สำหรับ (int คอลัมน์ = 0 คอลัมน์ < .length คณะ [แถว] คอลัมน์ ++) { กระดาน [แถว] [คอลัมน์] =ว่างเปล่า } } แนวนอน = int ใหม่ [ย้าย]; แนวตั้ง = int ใหม่ [ย้าย]; ขึ้นทางขวา แนวนอน [0] = -1 แนวตั้ง [0] = 1 ลงซ้าย แนวนอน [1] = 1 แนวตั้ง [1] = -1 ขึ้นทางซ้าย แนวนอน [2] = -1 แนวตั้ง [2] = -1 ลงขวา แนวนอน [3] = 1 แนวตั้ง [3] = 1 } {placeQueens บูลีสาธารณะ (คอลัมน์ int) ถ้า (คอลัมน์ > BOARD_SIZE) { กลับเป็นจริง } {อื่น บูลีน queenPlaced = false แถว int = 1 ในขณะที่ (! queenPlaced & & แถว < BOARD_SIZE) { ถ้า{(isUnderAttack (แถว คอลัมน์)) ++ แถว } / / จบถ้า {อื่น setQueen (แถว คอลัมน์); queenPlaced = placeQueens (คอลัมน์ + 1); ถ้า (! queenPlaced) { removeQueen(row,column) ++ แถว } / / จบถ้า } / / สิ้นสุดอื่น } / / จบในขณะที่ queenPlaced กลับ } / / สิ้นสุดอื่น } {ส่วนตัวโมฆะ removeQueen (int แถว คอลัมน์ int) กระดาน [แถว] [คอลัมน์] =ว่างเปล่า System.out.printf ("REMOVED ควีนจาก [% d][%d]
" แถว คอลัมน์); -ควีนส์ } {ส่วนตัวโมฆะ setQueen (int แถว คอลัมน์ int) กระดาน [แถว] [คอลัมน์] =ราชินี System.out.printf ("ราชินีวางใน [% d][%d]
" แถว คอลัมน์); ++ ควีนส์ } {สาธารณะบู isUnderAttack (int แถว คอลัมน์ int) เงื่อนไขแบบบูลีน =เท็จ ตรวจแถว สำหรับ (int คอลัมน์ = 0 คอลัมน์ < BOARD_SIZE คอลัมน์ ++) { ถ้า ((บอร์ด [แถว] [คอลัมน์] ==จริง)) { เงื่อนไขเป็นจริง = } } ตรวจสอบคอลัมน์ สำหรับ (int row_ = 0; row_ < board.length; row_ ++) { ถ้า (บอร์ด [row_] [คอลัมน์] ==จริง) { เงื่อนไขเป็นจริง = } } ตรวจสอบเส้นทแยงมุม สำหรับ (int row_ =แถว col_ =คอลัมน์ row_ > = 0 & & col_ < 8; row_ +=แนวนอน [0], col_ += vertical[0]) { ถ้า (บอร์ด [row_] [col_] ==จริง) { เงื่อนไขเป็นจริง = } } สำหรับ (int row_ =แถว col_ =คอลัมน์ row_ < 8 & & col_ > = 0; row_ +=แนวนอน [1], col_ += vertical[1]) { ถ้า (บอร์ด [row_] [col_] ==จริง) { เงื่อนไขเป็นจริง = } } สำหรับ (int row_ =แถว col_ =คอลัมน์ row_ > = 0 & & col_ > = 0; row_ +=แนวนอน [2], col_ += vertical[2]) { ถ้า (บอร์ด [row_] [col_] ==จริง) { เงื่อนไขเป็นจริง = } } สำหรับ (int row_ =แถว col_ =คอลัมน์ row_ < 8 & & col_ < 8; row_ +=แนวนอน [3], col_ += vertical[3]) { ถ้า (บอร์ด [row_] [col_] ==จริง) { เงื่อนไขเป็นจริง = } } กลับสภาพ } {ยกเลิก displayBoard สาธารณะ() เคาน์เตอร์ int = 0 สำหรับ (int แถว = 0 แถว < board.length แถว ++) { สำหรับ (int คอลัมน์ = 0 คอลัมน์ < .length คณะ [แถว] คอลัมน์ ++) { ถ้า (บอร์ด [แถว] [คอลัมน์] ==จริง) { System.out.printf (" | % s| ", "x"); เคาน์เตอร์ ++ } {อื่น System.out.printf (" | % s| ", "o"); } } System.out.println() } System.out.printf ("ควีนส์ %d ถูก placed
" เคาน์เตอร์); } {สาธารณะคงโมฆะหลัก (สตริงที่[]อาร์กิวเมนต์) TODO รหัสแอพลิเคชันตรรกะที่นี่ System.out.printf("TEST
") กลับ } }
การแปล กรุณารอสักครู่..
ระดับประชาชนราชินี {
// จำนวนแถวหรือคอลัมน์
int สาธารณะคงสุดท้าย BOARD_SIZE = 8; boolean [] [] คณะกรรมการ; // ระบุที่ว่างเปล่าตารางสาธารณะคงสุดท้ายบูลว่าง = false; // ระบุตารางซึ่งมีสมเด็จพระราชินีสาธารณะ สุดท้ายคง QUEEN บูล = true; // จำนวนของการเคลื่อนไหวสาธารณะคงย้าย int สุดท้าย = 4; // ย้ายแนวนอนint [] แนวนอน; // ย้ายแนวตั้งint [] แนวตั้งราชินีสาธารณะ int = 0; ราชินีสาธารณะ () { / / สร้างสร้างคณะกรรมการที่ว่างเปล่า= คณะกรรมการบูลใหม่ที่เป็น [BOARD_SIZE] [BOARD_SIZE] สำหรับ (int แถว = 0; แถว <board.length; แถว ++) { สำหรับ (int เทือกเขา = 0; เทือกเขา <กระดาน [แถว] .length; เทือกเขา ++ ) { คณะกรรมการ [แถว] [เทือกเขา] = ว่าง; } } แนวนอน = new int [ย้าย] แนวตั้ง = new int [ย้าย]; // ขึ้นด้านขวาในแนวนอน [0] = -1; แนวตั้ง [0] = 1; / / ลงซ้ายแนวนอน [1] = 1; แนวตั้ง [1] = -1; // ซ้ายขึ้นแนวนอน [2] = -1; แนวตั้ง [2] = -1; // ลงขวาแนวนอน [3] = 1; แนวตั้ง [3] = 1; } placeQueens บูลีนสาธารณะ (คอลัมน์ int) { if (คอลัมน์> BOARD_SIZE) { กลับจริง; } อื่น { บูล queenPlaced = false; แถว int = 1; ในขณะที่ (! queenPlaced แถว && <BOARD_SIZE) { if ( isUnderAttack (แถวคอลัมน์)) { ++ แถว; } // สิ้นสุดหากอื่น { setQueen (แถวคอลัมน์); queenPlaced = placeQueens (+ 1 คอลัมน์); if (queenPlaced) {! removeQueen (แถวคอลัมน์); ++ แถว; } // สิ้นสุดหาก} // ปลายอื่น} // สิ้นสุดในขณะที่ผลตอบแทน queenPlaced; } // ปลายอื่น} โมฆะส่วนตัว removeQueen (แถว int คอลัมน์ int) { คณะกรรมการ [แถว] [คอลัมน์] = ว่าง; System.out .printf ("ราชินีลบจาก [% d] [% d] n", แถวคอลัมน์); --queens; } โมฆะเอกชน setQueen (แถว int คอลัมน์ int) { คณะกรรมการ [แถว] [คอลัมน์] = QUEEN; System.out.printf ("ราชินีอยู่ใน [% d] [% d] n", แถวคอลัมน์); ++ ราชินี; } isUnderAttack บูลีนสาธารณะ (แถว int, int เทือกเขา) { สภาพบูล = false; // ตรวจแถวสำหรับ (คอลัมน์ int = 0; คอลัมน์ <BOARD_SIZE; คอลัมน์ ++) { if ((บอร์ด [แถว] [คอลัมน์] == จริง)) { สภาพ = true; } } // ตรวจคอลัมน์สำหรับ (int row_ = 0; row_ <board.length; _ แถว ++) { ถ้า (บอร์ด [แถว _] [เทือกเขา] == จริง) { สภาพ = true; } } // การตรวจสอบแนวทแยงสำหรับ (int row_ = แถว col_ = เทือกเขา; row_> = 0 && col_ <8; row_ + = แนวนอน [0], col_ + = แนวตั้ง [0]) { ถ้า (บอร์ด [แถว _] [col_] == จริง) { สภาพ = true; } } สำหรับ (int row_ = แถว col_ = เทือกเขา; row_ <8 && col_> = 0; row_ + แนวนอน = [1] col_ + = แนวตั้ง [1]) { ถ้า (บอร์ด [แถว _] [col_] == จริง) { สภาพ = true; } } สำหรับ (int row_ = แถว col_ = เทือกเขา; row_> = 0 && col_> = 0; row_ + = แนวนอน [2], col_ + = แนวตั้ง [2]) { ถ้า (บอร์ด [แถว _] [col_] == จริง) { สภาพ = true; } } สำหรับ (int row_ = แถว col_ = เทือกเขา; row_ <8 && col_ <8; row_ + = แนวนอน [3], col_ + = แนวตั้ง [3]) { ถ้า (บอร์ด [แถว _] [col_] == จริง) { สภาพ = true; } } กลับมา สภาพ; } โมฆะสาธารณะ displayBoard () { int เคาน์เตอร์ = 0; สำหรับ (int แถว = 0; แถว <board.length; แถว ++) { สำหรับ (int เทือกเขา = 0; เทือกเขา <กระดาน [แถว] .length; เทือกเขา ++) { ถ้า (บอร์ด [แถว] [เทือกเขา] == จริง) { System.out.printf ("|% s |", "x"); เคาน์เตอร์ ++; } อื่น { System.out.printf ("|% s |", " o "); } } System.out.println (); } System.out.printf ("% d ราชินีได้รับการวาง n" เคาน์เตอร์); } ประชาชนเป็นโมฆะคง main (String args []) { // สิ่งที่ต้องทำ การประยุกต์ใช้รหัสตรรกะที่นี่System.out.printf ("ทดสอบ n"); ผลตอบแทน; } }
การแปล กรุณารอสักครู่..
ชื่อคลาสควีน { หมายเลข
/ / แถวหรือคอลัมน์
สาธารณะคงสุดท้าย int board_size = 8 ;
แบบบูล [ ] [ ] กระดาน ;
/ / แสดงว่าว่าง สี่เหลี่ยมสาธารณะคงสุดท้าย
บูลีนว่างเปล่า = false ;
/ / แสดงเป็นตารางซึ่งประกอบด้วย ราชินี
สาธารณะคงสุดท้ายบูลีนราชินี = จริง ;
/ / จำนวนการย้ายสาธารณะคงสุดท้าย int
ย้าย = 4 ;
/ /
! [ ] ย้ายแนวนอนแนวนอน ;
/ /
แนวตั้งย้าย[ INT ] แนวตั้ง ;
สาธารณะ INT ราชินี = 0 ;
สาธารณะ queen() {
/ / ผู้รับเหมาก่อสร้างสร้างกระดานบอร์ดใหม่ = บูลีนเปล่า
[ board_size ] [ board_size ] ;
( Int แถว = 0 ; แถว < board.length ; แถว ) {
( int col = 0 ; col < บอร์ด [ แถว ] ความยาว ; col ) {
บอร์ด [ ] [ ] = แถวคอลัมน์ที่ว่างเปล่า ;
}
}
แนวนอนใหม่ = int [ ย้าย ] ;
แนวตั้งใหม่ = int [ ย้าย ] ;
/ / ขวาแนวนอน [ 0 ] = -
1
แนวตั้ง [ 0 ] = 1 ;
/ / ลงเหลือ
แนวนอน [ 1 ] = 1 ;
แนวตั้ง [ 1 ] = - 1 ;
/ /
แนวนอนซ้าย [ 2 ] = - 1 ;
แนวตั้ง [ 2 ] = - 1 ;
/ / ลงขวา
แนวนอน [ 3 ] = 1 ;
แนวตั้ง [ 3 ] = 1 ;
}
สาธารณะบูลีน placequeens ( คอลัมน์ int ) {
ถ้า ( คอลัมน์ > board_size ) {
}
อื่นกลับจริง ; {
บูลีน queenplaced = false ;
1 แถว = 1 ;
เวลา ! queenplaced &&แถว < board_size ) {
ถ้า ( isunderattack ( คอลัมน์แถว ) ) {
แถว} / / ถ้าสุดท้าย {
อีก setqueen ( คอลัมน์แถว ) ;
queenplaced = placequeens ( คอลัมน์ 1 ) ;
( ถ้า ! queenplaced ) {
removequeen ( คอลัมน์แถว ) แถว ;
;
} / / จบถ้า
} / / จบอื่น
} / / จบในขณะที่
กลับ queenplaced ;
} / / จบอื่น
}
ส่วนตัวเป็นโมฆะ removequeen ( 1 แถว 1 คอลัมน์ ) {
[ ] [ บอร์ดแถวคอลัมน์ ] = ว่าง ;
ระบบ ออก printf ( " ราชินีออกจาก [ % D ] [ % D ] N " , แถว , คอลัมน์ ) ;
-- ราชินี
}
;ส่วนที่เป็นโมฆะ setqueen ( 1 แถว 1 คอลัมน์ ) {
บอร์ด [ ] [ ] = ราชินีแถวคอลัมน์ ;
ระบบ ออก printf ( " ราชินีอยู่ใน [ % D ] [ % D ] N " , แถว , คอลัมน์ ) ;
ราชินี ;
}
isunderattack int สาธารณะบูลีน ( แถว int col ) {
ตรรกะเงื่อนไข = false ;
/ / เช็คแถว
( int คอลัมน์ = 0 ; คอลัมน์ < board_size ; คอลัมน์ ) {
ถ้า ( ( บอร์ดแถว ] [ คอลัมน์ ] = = true ) ) {
} เงื่อนไข = true ;
}
/ /
ตรวจสอบคอลัมน์สำหรับ ( 1 row_ = 0 ;row_ < board.length ; row_ ) {
ถ้าบอร์ด [ row_ ] [ คอลัมน์ ] = = จริง ) {
} เงื่อนไข = true ;
}
/ / เช็คเส้นทแยงมุม
( int row_ = แถว col_ = Col row_ > = 0 && col_ < 8 ; row_ [ 0 ] = แนวนอน col_ , แนวตั้ง [ 0 ] =
) { ถ้า ( บอร์ด [ row_ ] [ col_ ] = = จริง ) {
} เงื่อนไข = true ;
}
( int row_ = แถว col_ = Col row_ < 8 && col_ > = 0 = ; row_ แนวนอน [ 1 ] , col_ = แนวตั้ง [ 1 ] ) {
ถ้าบอร์ด row_ col_ [ ] [ ] = = จริง ) {
} เงื่อนไข = true ;
}
( int row_ = แถว col_ = Col row_ > = 0 && col_ > = 0 = ; row_ แนวนอน [ 2 ] , col_ = แนวตั้ง [ 2 ] ) {
ถ้า ( บอร์ด [ row_ ] [ col_ ] = = จริง ) {
} เงื่อนไข = true ;
}
( int row_ = แถว col_ = Col row_ < 8 && col_ < 8 ; row_ = แนวนอน [ 3 ] , col_ = แนวตั้ง [ 3 ] ) {
ถ้าบอร์ด [ row_ ] [ col_ ] = = จริง ) {
} สภาพจริง =
}
;เงื่อนไขการคืนสินค้า ;
}
displayboard ประชาชนเป็นโมฆะ ( ) {
1 เคาน์เตอร์ = 0 ;
( Int แถว = 0 ; แถว < board.length ; แถว ) {
( int col = 0 ; col < บอร์ดแถว ] ความยาว ; col ) {
ถ้าบอร์ดแถว ] [ คอลัมน์ ] = = จริง ) {
ระบบ ออก printf ( " | %s | " , " X " ) ;
} {
อีกนับ ;
ระบบ ออก printf ( " | %s | " , " O " ) ; } }
ระบบ ออก println() ;
ระบบ }
. . printf ( " %d ควีนส์มีไว้ N " Counter )
}
;โมฆะสาธารณะคงที่หลัก ( string [ ] มีอาร์กิวเมนต์ ) {
/ / รหัส ทำโปรแกรมตรรกะที่นี่
ระบบ ออก printf ( ทดสอบ " n " ) ;
} } กลับมา
การแปล กรุณารอสักครู่..