【发布时间】:2013-04-09 09:57:37
【问题描述】:
如何用数字填充方形二维数组,以便创建从 1 到 (edge length)2 的升序连续数字的(随机)路径?
我正在尝试用 JavaScript 编写 Hidato(又名 Hidoku)生成器。它不一定是最好的语言,但这就是我目前使用的语言。游戏板最初只是部分填充。显示的唯一保证数字是路径中的第一个和最后一个数字。该游戏的理念是通过网格(垂直、水平或对角线)创建一条数字路径,从而形成一个连续的递增数字链。由于考虑了对角线,链可能会重叠。
我被困在电路板生成部分。一个有效的网格必须具有从1 到(grid size)2 的连续数字的(单个、非分支)路径。我看了又看,但没有发现任何可能有帮助的东西。有没有一种路径跟踪算法可以用由连续数字组成的单个路径填充二维数组?
我最初的幼稚方法是用值填充二维数组并交换值,直到网格成为有效的 Hidato 谜题。这将花费很长时间来计算并且效率非常低,所以我放弃了这个想法。
我的下一个想法是使用回溯路径跟踪器用连续值填充网格,但是我不确定如何实现这样的跟踪器。生成路径很容易(选择一个随机的相邻单元格并移动到它直到 2D 数组已满),但我这里的问题是算法的“回溯性”,或者其他一些始终确保存在随机整个网格中连续数字的路径。我想到了一个迷宫追踪器,但这并不处理没有分叉或死胡同的单一路径。
我该如何从这里开始?我应该考虑路径跟踪器或其他类似算法之外的其他选项吗?
相关问题:
【问题讨论】:
-
我猜对了吗:你把国王棋子放在棋盘的一个随机单元格上,每个单元格只访问一次。然后你拍下这个棋盘的“快照”,并按遍历顺序用数字重新计算所有单元格?
-
是的,没错。但是,单元格必须相邻 - 我不能随意跳棋
-
你需要细胞有共同的边缘吗?就像棋子 Rook 移动,但最多只能移动一个单元格?
-
我不确定你的意思。这里的棋子只能向任意方向移动一个格
-
哪条规则为真:“您只能向左、上、右或下移动一个单元格”或“您可以在所有八个方向上移动:左上、上、右上、左、右、左下、下和右下”?
标签: javascript algorithm