- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在理解网上获得的代码时遇到了问题。这是皇后检查是否与其他皇后发生碰撞。有人可以向我解释一下这是做什么的吗?第一个条件,我知道是检查同一行,但是绝对数呢?
if ((board[i] == board[row]) || Math.abs(board[row] - board[i]) == (row - i))
{
return false;
}
完整代码如下:
class NQueen {
private int[] board;
private int size;
private ArrayList allSolutions = null;
public int[] getBoard() {
return board;
}
public ArrayList getAllSolutions() {
return this.allSolutions;
}
public NQueen(int size) {
this.size = size;
board = new int[this.size];
this.allSolutions = new ArrayList();
}
public void place(int row) {
// base case
if (row == size) {
int[] temp = new int[size];
// copy in temp array
System.arraycopy(board, 0, temp, 0, size);
// add to the list of solution
allSolutions.add(new Solution(temp));
return ;
} else {
for (int i = 0; i < size; i++) {
board[row] = i;
/* when you place a new queen
* check if the row you add it in, isn't
* already in the array. since the value of arrray is
* the row, so we only need to check the diagonals no need to check for collisions on the left or right.
* As long as there is no duplicate values in the array.*/
if (valid(row)){
place(row + 1);
}
}
}
}
public boolean valid(int row) {
for (int i = 0; i < row; i++) {
// if same row or same diagonal
if ((board[i] == board[row]) || Math.abs(board[row] - board[i]) == (row - i))
{
return false;
}
}
return true;
}
}
最佳答案
如果你有一个二维数组,并且棋盘上的每个位置都是数组中的“单元格”,那么为了处于同一对角线上,棋子必须具有相同的水平和垂直距离。
Math.abs(board[row] - board[i]) == (row - i)
确实检查了这一点。 Math.abs
是因为第二 block 可以是左上、右上、右下和左下。不确定您的算法到底是如何实现的,但也采用第二个操作数的绝对值可能是个好主意。
小板示例:
1 2 3 4
1
2 x
3
4 y
所以这里我们的水平距离为 2 (abs(1-3)),垂直距离也为 2 (abs(2-4))
示例2:
1 2 3 4
1 x
2 y
3
4
这里我们的水平和垂直距离只有1(abs(4-3)和abs(1-2))
您的数组在每个元素中存储皇后在该行中的位置。所以它只是一个一维数组(不是我最初建议的二维数组)。
因此,对于我的第一个示例,您的数组将包含:
[ 0, 1, 0, 3 ]
(我认为OP中的代码假设从0开始的位置,但用0
(new int[size]
)初始化数组元素。这可能是一个 bug,因为 0 是有效位置,可能与其他约束冲突,即,如果上一行或下一行的皇后未初始化(=位置 0),则您将无法在索引 1 上放置皇后.)
回到示例(为了清晰起见,使用基于 1 的索引并避免上述错误):a[2] - a[4] == 1 - 3
(a [2] == 1
,a[4] == 3
)
如果“y” block 被移动到第 2 列,那么您将得到 a[2] - a[4] != 1 - 3
,因为它们不共享对角线 ( a[2] == 1
,a[4] == 3
)
关于java - 斜查n皇后JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60473211/
我有一个右下角倾斜的元素,我必须在其上放置一个盒子阴影。有时倾斜的 Angular 被徽章覆盖 - 我的问题不适用,如果是这样的话: 这是信息框及其边 Angular 的 (s)css 部分(还有更多
是否可以在纯 html/css 中创建类似下面的内容? 我想做这个响应式和全 (100%) 宽度(最大左 Angular 100 像素,右边最小 50 像素,类似的东西)。 最佳答案 您可以通过转换(
如何在 fabricjs 文本中为文本提供渐变或斜 Angular 效果?? http://fabricjs.com/fabric-intro-part-2/ 这里给出了形状和所有示例,我将其与文本绑
我用过: http://apps.eky.hk/css-triangle-generator/ 为彼此对 Angular 放置的两个不等边三 Angular 形生成 css: 左下三 Angular
我是一名优秀的程序员,十分优秀!