问题标签 [magic-square]

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 回答
2784 浏览

matlab - 魔方函数 Matlab

对于一个项目,我应该编写自己的函数,该函数将与 matlab 中的魔术函数执行相同的操作。我显然不是要求任何人写出我的问题,但如果有人能给我任何关于如何启动它或示例代码的想法,我将不胜感激!我完全不知道如何开始这个......

0 投票
2 回答
2918 浏览

java - 用遗传算法解决魔方:人口分数收敛快,但永远达不到目标?

想要了解更多关于 GA 的愿望再次燃起,与其大量阅读却无所事事,我决定从另一个方向开始:选择一个问题并尝试解决它。

我选择了魔方问题。为了编码染色体,我使用Permutation Encoding,以及Mutation()NewChild(parent1, parent2, pivot)的以下方法。

我的选择算法有点奇怪,是根据网上找到的例子改编的。

分数是根据行/列/对角线之和与魔术常数之差的平方计算的,如下所示

我注意到它收敛速度非常快,一旦达到 1..7 的分数(越少越好)就停止改进。

我认为这是:它达到了局部最优,一个潜在的井,如果你可以这样称呼它,并且不会因为突变不够不同而跳过附近的山丘?
在此处输入图像描述

我尝试将突变率更改为 5 - 80%,在染色体种群中留下 10-20% 的精英群体,将种群大小从 16-32 条染色体改变,但没有运气。

我究竟做错了什么?我可以使用哪些改进来使总体得分收敛到零?

如果需要,我可以发布完整的源代码,如果有人觉得它有用或想玩它。

更新:这是一个大小为 5 的立方体的收敛速度,交叉率为 60%,突变率为 10%:

在此处输入图像描述

0 投票
2 回答
4925 浏览

python - 置换魔方

我在编写用于求解魔方的递归置换函数时遇到了一些麻烦。对于这个函数,我不允许使用二维数组,只能使用列表。以下是我目前拥有的:

size由用户通过命令行参数定义。

如果上面编写的函数完成了置换值的任务,我会感到有些困惑。

0 投票
5 回答
1744 浏览

performance - 益智编程 - 无法优化?

我一直在编写程序来解决各种数字难题,但我一直在设计无法优化的不合理复杂的搜索算法。

例如,在一个谜题中,给你一个 3x3 的网格,下面是 1 到 9 的数字:

您可以在任何方向上循环任何行或列中的数字。下面是一个将顶行数字向右移动的示例。如果数字位于网格边缘,则数字将循环。

您必须以这种方式移动数字,直到创建一个幻方,其中每列、每行和对角线中的数字之和为 15。

我编写了一个 DFS 蛮力算法来测试所有可能的移动序列,尽管每回合可用移动的数量呈指数增长(大约 12 ^ [当前回合]),使其毫无用处。

BFS 似乎是找到正确移动的最佳选择,但这需要我存储数百个甚至数千个网格副本才能回溯!


我一直遇到这类问题。BFS 和 DFS 算法分别使用过多的内存和时间。我需要帮助优化这些算法,以便它们运行得更快、更有效。也许识别数字的模式和关系或赋予算法逻辑以实现目标会有所帮助?(我不知道那会带来什么)。

编辑:

我的固定算法就像一个魅力。学习如何给我的排列编号是必不可少的。谢谢你们!

0 投票
2 回答
1044 浏览

java - 扫描仪输入问题

如何从扫描仪中获取用户的输入,然后将该输入放入 2D 阵列。这就是我所拥有的,但我认为它不正确:

我想做的是创建一个二维数组并创建一个魔方。我已经弄清楚了布尔部分,我只需要帮助将用户的数字序列输入到数组中,以便布尔方法可以测试数字。非常感谢所有帮助

0 投票
2 回答
971 浏览

java - 魔方递归无限循环java

我正在尝试编写一个程序,该程序可以为固定的 N 维生成所有可能的幻方。我将通过用值填充对角线单元格然后用值填充行来解决这个问题。

填写行时,我似乎陷入了无限循环,但似乎无法弄清楚如何或为什么。我还没有实现总和检查,以检查行或列的总和是否正确,但这在这里无关紧要。

如果有人可以帮助我,我会非常感激。代码如下

}

0 投票
1 回答
1900 浏览

prolog - Prolog:在不使用 clp(FD) 的情况下查找所有 3x3 幻方

我想找到所有可能的 3x3 幻方。

引用英文维基百科

幻方是不同数字的排列(即每个数字只使用一次),通常是整数,在方格中,其中每行和每列中的数字以及主对角线和辅助对角线中的数字都相加最多相同的数字。

这是一个示例解决方案:

8 1 6
3 5 7
4 9 2

我如何编写一个 Prolog 程序来找到所有解决方案而不使用library(clpfd)?

0 投票
1 回答
837 浏览

c - C - 2D 阵列 - 魔方 4 阶

所以基本上,我必须生成 4 阶的幻方,即行和列可以被 4 整除。

我得到了算法,它是

  1. 遍历数组并填充对角子集
  2. 向后遍历数组并填充其余部分

我已经用上面的代码完成了 4x4 数组,它扩展到 8x8、12x12 等,但我被困在第 1 部分),即填充对角线子集(例如,将 8x8 拆分为 4x4 并取该对角线)。 ..我不知道该怎么做,只设法填写对角线本身

tldr,以上是我用来知道它是否是对角线的条件,有什么建议我可以改变条件以知道它是否是对角线子集而不是对角线?

谢谢

0 投票
1 回答
912 浏览

c - 打印 2D 数组打印垃圾(Magic Square)

我正在尝试编写一个 C 程序来打印一个幻方。但是,我在构建广场时遇到了错误。任何人都可以帮助找出导致这些错误的原因吗?以下是我的相关代码和我的输出:

代码:

输出:

0 投票
1 回答
2605 浏览

c++ - 魔方,我无法将行、列和对角线相加

我需要求和并输出行、列和主对角线。有人可以告诉我我做错了什么吗?这是我被赋予使用的代码,但我似乎无法让它输出我的总和。我在下面的代码中添加了一条评论,我相信我的问题存在,它从哪里开始求和,从哪里停止。我将不胜感激任何帮助,因为我无法自己解决这个问题。输出应该是一个 3 x 3 矩阵,其中第四行和第四列中的行、列和对角线之和等于 15。我的输出不是对行、列和对角线求和。