今天看了一道国际象棋的布局问题,码界称之为“N皇后”问题,十分有趣。采用递归思想,不断探索和回溯,解法暴力之极。这里分享当棋盘不大的时候,基础的N皇后问题实现代码。思路藏在注释里面啦~
主要是校验的时候有两点比较重要:
- 不同行和不同列就是说,arr[i]不能等于arr[a],因为一行只能放一个,一列只能放一个。
- 不在同一条斜线上就是说,|i-a|不能等于|arr[i]-arr[a]|
题目描述
N皇后问题是指在N∗N的棋盘上要摆N个皇后(1<=n<=14)
要求:任何两个皇后不同行,不同列也不在同一条斜线上,求给一个整数NN,返回N皇后的摆法数。
示例1
输入
1
返回值
1
示例2
输入
8
返回值
92
show the code as follow:
package math;
import org.junit.Test;
/**
* N皇后问题的实现
* @author jsyuger
* 用一个一维数组arr[i],数组下标i表示皇后放置的行号,arr[i]的值表示皇后放置的列号