Vorlesung 5 / Aufgabe 2
This commit is contained in:
parent
7c8a682066
commit
3e064693bf
128
VL05/Aufgabe02/Aufgabe02.java
Normal file
128
VL05/Aufgabe02/Aufgabe02.java
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
package VL05.Aufgabe02;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Vorlesung 5 / Aufgabe 2
|
||||||
|
*
|
||||||
|
* @author Sebastian Brosch
|
||||||
|
*/
|
||||||
|
public class Aufgabe02 {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
final int DAMEN = 8;
|
||||||
|
int chessboard[][] = new int[DAMEN][DAMEN];
|
||||||
|
queens(chessboard, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to place a queen on the chessboard.
|
||||||
|
*
|
||||||
|
* @param chessboard The chessboard to place the queen.
|
||||||
|
* @param q The number of the queen to be placed.
|
||||||
|
*/
|
||||||
|
private static void queens(int[][] chessboard, int q) {
|
||||||
|
if (q > chessboard.length) {
|
||||||
|
print(chessboard);
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < chessboard.length; i++) {
|
||||||
|
if (isQueenPossible(chessboard, q - 1, i)) {
|
||||||
|
|
||||||
|
chessboard[q - 1][i] = 1;
|
||||||
|
queens(chessboard, q + 1);
|
||||||
|
chessboard[q - 1][i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to check whether a queen can be placed on the field.
|
||||||
|
*
|
||||||
|
* @param chessboard The chessboard to place the queen.
|
||||||
|
* @param row The row to place the queen.
|
||||||
|
* @param column The column to place the queen.
|
||||||
|
* @return The state whether the queen can be placed on the field.
|
||||||
|
*/
|
||||||
|
private static boolean isQueenPossible(int[][] chessboard, int row, int column) {
|
||||||
|
int currentRow = 0;
|
||||||
|
int currentColumn = 0;
|
||||||
|
|
||||||
|
// check whether the queen can be placed in current row.
|
||||||
|
for (int c = 0; c < chessboard[row].length; c++) {
|
||||||
|
if (chessboard[row][c] == 1)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check whether the queen can be placed in current column.
|
||||||
|
for (int r = 0; r < chessboard.length; r++) {
|
||||||
|
if (chessboard[r][column] == 1)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check whether the queen can be placed diagonal (top left).
|
||||||
|
currentRow = row;
|
||||||
|
currentColumn = column;
|
||||||
|
|
||||||
|
while (currentColumn >= 0 && currentRow >= 0) {
|
||||||
|
if (chessboard[currentRow][currentColumn] == 1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
currentRow--;
|
||||||
|
currentColumn--;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check whether the queen can be placed diagonal (bottom right).
|
||||||
|
currentRow = row;
|
||||||
|
currentColumn = column;
|
||||||
|
|
||||||
|
while (currentColumn < chessboard[row].length && currentRow < chessboard.length) {
|
||||||
|
if (chessboard[currentRow][currentColumn] == 1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
currentRow++;
|
||||||
|
currentColumn++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check whether the queen can be placed diagonal (bottom left).
|
||||||
|
currentRow = row;
|
||||||
|
currentColumn = column;
|
||||||
|
|
||||||
|
while (currentColumn >= 0 && currentRow < chessboard.length) {
|
||||||
|
if (chessboard[currentRow][currentColumn] == 1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
currentRow++;
|
||||||
|
currentColumn--;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check whether the queen can be placed diagonal (top right).
|
||||||
|
currentRow = row;
|
||||||
|
currentColumn = column;
|
||||||
|
|
||||||
|
while (currentColumn < chessboard[row].length && currentRow >= 0) {
|
||||||
|
if (chessboard[currentRow][currentColumn] == 1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
currentRow--;
|
||||||
|
currentColumn++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to print a chessboard.
|
||||||
|
*
|
||||||
|
* @param chessboard The chessboard to be printed.
|
||||||
|
*/
|
||||||
|
private static void print(int[][] chessboard) {
|
||||||
|
System.out.println("\nChessboard:\n");
|
||||||
|
|
||||||
|
for (int r = 0; r < chessboard.length; r++) {
|
||||||
|
for (int c = 0; c < chessboard[r].length; c++) {
|
||||||
|
System.out.printf("%d", chessboard[r][c]);
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user