N皇后问题是一个典型的约束求解问题,利用递归机制,可以很快的得到结果。
N皇后问题的描述:
在一个n*n的棋盘上,摆放n个皇后,要求每个皇后所在行、列、以及两个对角线上不能出现其他的皇后,否则这些皇后之间将会相互攻击。如下图所示。
利用递归机制,可以很容易的求解n皇后问题。针对八皇后,总共有92种解。下面将给出N-皇后问题的一般求解代码,在这里代码是使用java编码的。
总共设计了三个类,一个是皇后类(Queen),一个棋盘类(Board),一个是求解主程序类(NQueens)。具体代码如下:
1: import java.util.ArrayList;
2: import java.util.List;
3:
4: public class NQueens {
5:
6: private int numSolutions;//求解结果数量
7: private int queenSize;//皇后的多少
8: private Board board;//棋盘
9: private List queens = new ArrayList();//皇后
10: //private List nQueens = new ArrayList();
11:
12: public NQueens(){
13:
14: }
15:
16: public NQueens(int size){
17: numSolutions = 0;
18: queenSize = size;
19: board = new Board(queenSize);
20: for (int i = 0; i < queenSize; i++) {
21: Queen queen &