n皇后问题java_N皇后问题java实现

N皇后问题是一个典型的约束求解问题,利用递归机制,可以很快的得到结果。

N皇后问题的描述:

在一个n*n的棋盘上,摆放n个皇后,要求每个皇后所在行、列、以及两个对角线上不能出现其他的皇后,否则这些皇后之间将会相互攻击。如下图所示。

0a01cda0e3c71530e4ca74debe4e7ba2.png

利用递归机制,可以很容易的求解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 &

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java语言实现n皇后问题代码,其中n代表皇后的数量: ```java public class NQueens { private final int n; private int[] queens; public NQueens(int n) { this.n = n; queens = new int[n]; } public void solve() { if (placeQueen(0)) { printQueens(); } else { System.out.println("No solution found"); } } private boolean placeQueen(int row) { if (row == n) { return true; } for (int i = 0; i < n; i++) { queens[row] = i; if (isValid(row, i) && placeQueen(row + 1)) { return true; } } return false; } private boolean isValid(int row, int col) { for (int i = 0; i < row; i++) { if (queens[i] == col || queens[i] - i == col - row || queens[i] + i == col + row) { return false; } } return true; } private void printQueens() { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (queens[i] == j) { System.out.print("Q "); } else { System.out.print("* "); } } System.out.println(); } } public static void main(String[] args) { NQueens nQueens = new NQueens(8); nQueens.solve(); } } ``` 在这个实现中,我们使用了一个整数数组来存储每一行的皇后所在的列。在solve()方法中,我们首先调用placeQueen(0)来尝试放置第一个皇后。如果可以放置,我们继续尝试放置下一个皇后;如此反复,直到所有皇后都被放置。如果无法放置任何一个皇后,则返回false。在placeQueen()方法中,我们使用一个循环来尝试放置每一个皇后。在每一次循环中,我们将皇后放置在当前行中的某一列,然后检查它是否与之前的皇后冲突。如果没有冲突,则递归调用placeQueen()方法来尝试放置下一个皇后。如果所有皇后都被成功放置,则返回true。在isValid()方法中,我们检查当前皇后是否与之前的皇后冲突,如果有冲突,则返回false。最后,在printQueens()方法中,我们打印出皇后的位置,其中皇后用“Q”表示,空白格用“*”表示。在main()方法中,我们创建一个NQueens对象,并调用solve()方法来解决n皇后问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值