***7.22 (Game: Eight Queens) The classic Eight Queens puzzle is to place eight queens on a chessboard such that no two queens can attack each other (i.e., no two queens are on the same row, same column, or same diagonal). There are many possible solutions. Write a program that displays one such solution. A sample output is shown below:
|Q| | | | | | | |
| | | | |Q| | | |
| | | | | | | |Q|
| | | | | |Q| | |
| | |Q| | | | | |
| | | | | | |Q| |
| |Q| | | | | | |
| | | |Q| | | | |
public class ProgrammingEx7_22 { public static void main(String[] args) { int chessboardSize = 8; int[] chessboard = new int[chessboardSize]; for (int i = 0; i < 077777777; i++) { int tmp = i; for (int j = chessboardSize - 1; j >= 0; j--, tmp /= chessboardSize) chessboard[j] = tmp % chessboardSize; if (!isHorizonalFine(chessboard)) continue; if (!isDiagonalFine(chessboard)) continue; printChessboard(chessboard); break; } } public static boolean isHorizonalFine(int[] chessboard) { boolean[] numbers = new boolean[chessboard.length]; for (int i = 0; i < chessboard.length; i++) numbers[chessboard[i]] = true; for (int i = 0; i < numbers.length; i++) if (!numbers[i]) return false; return true; } public static boolean isDiagonalFine(int[] chessboard) { for (int i = 0; i < chessboard.length; i++) { for (int j = i + 1; j < chessboard.length; j++) { if (chessboard[j] - chessboard[i] == j - i) return false; if (chessboard[i] - chessboard[j] == j - i) return false; } } return true; } public static void printChessboard(int[] chessboard) { for (int i = 0; i < chessboard.length; i++) { for (int j = 0; j < chessboard.length; j++) System.out.print(chessboard[i] == j ? "|Q" : "| "); System.out.println("|"); } System.out.println(); } }
hello again
ReplyDeletei guess your answer is wrong!!!
@zakaria hashi thank you i will have a look in a while and if found any issues will report back with correction.
ReplyDelete@zakaria hashi thank you yes the solution had problem but have fixed it now. Thank you once again for contributing.
ReplyDelete