1 import javafx.application.Application;
2 import javafx.geometry.Pos;
3 import javafx.stage.Stage;
4 import javafx.scene.Scene;
5 import javafx.scene.control.Label;
6 import javafx.scene.image.Image;
7 import javafx.scene.image.ImageView;
8 import javafx.scene.layout.GridPane;
9
10 public class EightQueens extends Application {
11 public static final int SIZE = 8;
12
13
14
15 private int[] queens = {-1, -1, -1, -1, -1, -1, -1, -1};
16
17 @Override
18 public void start(Stage primaryStage) {
19 search();
20
21
22 GridPane chessBoard = new GridPane();
23 chessBoard.setAlignment(Pos.CENTER);
24 Label[][] labels = new Label[SIZE][SIZE];
25 for (int i = 0; i < SIZE; i++)
26 for (int j = 0; j < SIZE; j++) {
27 chessBoard.add(labels[i][j] = new Label(), j, i);
28 labels[i][j].setStyle("-fx-border-color: black");
29 labels[i][j].setPrefSize(55, 55);
30 }
31
32
33 Image image = new Image("image/queen.jpg");
34 for (int i = 0; i < SIZE; i++)
35 labels[i][queens[i]].setGraphic(new ImageView(image));
36
37
38 Scene scene = new Scene(chessBoard, 55 * SIZE, 55 * SIZE);
39 primaryStage.setTitle("EightQueens");
40 primaryStage.setScene(scene);
41 primaryStage.show();
42 }
43
44
45 private boolean search() {
46
47
48 int k = 0;
49 while (k >= 0 && k < SIZE) {
50
51 int j = findPosition(k);
52 if (j < 0) {
53 queens[k] = -1;
54 k--;
55 } else {
56 queens[k] = j;
57 k++;
58 }
59 }
60
61 if (k == -1)
62 return false;
63 else
64 return true;
65 }
66
67 public int findPosition(int k) {
68 int start = queens[k] + 1;
69
70 for (int j = start; j < SIZE; j++) {
71 if (isValid(k, j))
72 return j;
73 }
74
75 return -1;
76 }
77
78
79 public boolean isValid(int row, int column) {
80 for (int i = 1; i <= row; i++)
81 if (queens[row - i] == column
82 || queens[row - i] == column - i
83 || queens[row - i] == column + i)
84 return false;
85 return true;
86 }
87
88
92 public static void main(String[] args) {
93 launch(args);
94 }
95 }