问题标签 [n-queens]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
853 浏览

python - 安排回溯python

我很难弄清楚如何通过在 python 上回溯来生成安排,这是他们在大学问我们的问题

一组从 1 到 n 编号的 n (n<=10) 人被放在一排椅子上,但每两个相邻的人之间出现了一些利益冲突。显示替换人员的所有可能方式,以便在冲突中的任何两个人之间保持一个或最多两个其他人。

我设法修改了排列和皇后的代码,但我真的不知道在哪里放置条件,例如 k 是数字,k 必须与字符串 +1 中的前一个数字不同,并且必须不同于下一个数字+1

坐在椅子上的人的名单是 1 2 3 4(少于 3 人是不可能的)一个正确的解决方案是 1 3 4 2 和 3 1 4 2

这是代码:

0 投票
1 回答
784 浏览

java - N * N 皇后算法获取坐标

我正在尝试N*N用一些扭曲来实现女王算法。在这个版本中,女王也可以像骑士一样移动......

一切正常,但我正在尝试获取所有可能解决方案的坐标。问题是,如果我把它放在里面col == n,它只会打印最后一个。关于如何解决这个问题的任何想法?

0 投票
1 回答
4605 浏览

java - java中使用堆栈和回溯的n皇后谜题

这是我在 java 中解决 n-queens 问题的代码。但是,当它应该是 92 时,输出是 0(在这种情况下是 8 个皇后的解数)。我们应该只使用堆栈和回溯(没有递归!!)。我真的被困住了!任何帮助将不胜感激!

0 投票
1 回答
123 浏览

c++ - 如何完成这个调用函数的for循环

我在尝试使某个 for 循环继续完成 1D Queens 问题时遇到了麻烦。

首先,我对所有内容都使用了 goto 语句。现在我试图通过使用函数来摆脱 goto 语句。我最终会摆脱所有这些,但我首先关注的是 NR(新行)和回溯,因为它们是用来互相调用的。

我遇到问题的 for 循环是检查一个位置是否对皇后安全的循环。我在评论中指出了未完成的 for 循环。

0 投票
1 回答
1417 浏览

c++ - 如何用蛮力解决8皇后一维数组?

我被分配修改一个 8 Queens 程序以使用一维数组并使用蛮力(已经进行了回溯)。我想出了以下代码:

它一直在循环,我不知道为什么。有人愿意帮助我吗?

0 投票
1 回答
1676 浏览

python - 求 N-queens 谜题递归算法的唯一解

大家好!我怎样才能找到这个 N 皇后谜题递归算法的唯一解?它只找到所有解决方案:在 8x8 上它将是 92 个解决方案,但唯一的是只有 12 个(其他解决方案是翻译并从这 12 个镜像)

0 投票
1 回答
2670 浏览

c++ - 如何在 C++ 中查看一个数组是否有连续的数字?

这基本上是 8 个皇后问题,但是在一维数组中用蛮力解决它。假设我有一个大小为 8 的数组(名为 b),其元素范围为 0 到 7。

我用 8 个 for 循环初始化数组中的每个索引,如下所示:

这个程序应该做的是检查数字 0 到 7 的每个组合,并仅在某些条件下返回 true。应该有 92 个解决方案,如果这听起来很熟悉,应该是 - 这是使用蛮力的 8 个皇后问题。从这里,这就是我所理解的条件:

我希望能够检查一个数组是否有连续的数字串;如:

[0|5|7|1|2|3|6|4]

这里,元素b[3]、b[4]和b[5]是连续的。我不想这样,我想返回false,因为有一串连续的数字(基本上是皇后在进攻)

我也不想要一个包含一串向后连续数字的数组,如下所示:

[0|5|7|3|2|1|6|4]

最后,我不希望索引中有两个或更多数字,如果我们只是更改它们之间的数字,它们会使它们看起来是连续的:

[0|2|4|6|1|3|5|7]

以上是不可接受的,因为 b[0] 和 b[7] 是它们“连续索引”中的数字(因为至少有 2 个皇后在互相攻击)。

[6|1|3|0|4|7|5|2]

以上也是不可接受的,因为 b[1] 和 b[4] 也在连续索引中。

同样,当交换值时,数组

[7|2|4|6|1|3|5|0]

[6|4|3|0​​|1|7|5|2]

也是不能接受的。我也不能有 2 个或更多相同的数字。

我遇到的问题是创建检查功能。我被告知我需要使用 1 个 for 循环和 1 个 if-then 语句。检查功能可以按原样获取整个数组吗?如果是这样,如何查看数组中最右边的元素,并检查它是否有连续的索引(皇后正在攻击它)?我试过这个:

但这不仅行不通(我得到了 300 多个解决方案),它也没有我听说的那么小。

0 投票
1 回答
3270 浏览

java - 模拟退火 N 皇后概率公式

我在使用模拟退火算法来解决 n 个皇后问题时遇到了一些麻烦。基本上,我让它寻找更好的更多,它工作得很好,但是我运行一个公式来检查它是否应该采取“坏”的举动。据我了解,公式是 e^(板状态计算变化)/CurrentTemperature。该数字应与随机双精度或浮点数进行比较,如果随机数大于等式,则算法应采取“坏”举动。我遇到的问题是公式总是非常接近 1 或超过 1。这是我的一些代码(让我知道是否应该提供更多):

我尝试了很多方法,例如将检查变量设为负数或取棋盘状态之间差异的绝对值。此外,被调用的计算函数基本上是扫描棋盘并返回有多少皇后发生冲突,这是一个 int。让我知道是否需要更多说明。谢谢

0 投票
2 回答
2522 浏览

java - 8个带递归的非攻击皇后算法

我在编写 8 个皇后问题时遇到了麻烦。我编写了一个类来帮助我解决它,但由于某种原因,我做错了。我有点明白应该发生什么。

此外,我们必须使用递归来解决它,但我不知道如何使用我读过的回溯,所以我只是在检查位置是否合法的方法中使用它。

我的板是String [] [] board = { { "O", "O"...等,有 8 行和 8 列。如果我在概念上遇到任何错误或犯了严重的 Java 错误,请这样说:D 谢谢!

0 投票
4 回答
9693 浏览

c++ - 如何用布尔值打破while循环?

我试图打破几个嵌套的 while 循环,但我遇到了麻烦。我希望这个程序进入外循环,它只会运行一定的次数。我尝试用布尔值来做,但我的程序终止得太早了。这是一个 N-Queens 问题,我正在解决 1x1、2x2、3x3、...nxn 个皇后。

这是我的代码: