【发布时间】:2017-07-29 23:42:48
【问题描述】:
我有一个m x m 二维数组,我想随机选择一系列n 元素。元素必须相邻(不是对角线)。这里有什么好的方法?我虽然从随机起点开始进行深度优先搜索,但对于这样一个简单的问题来说,这似乎有点矫枉过正。
【问题讨论】:
标签: arrays list search path tree
我有一个m x m 二维数组,我想随机选择一系列n 元素。元素必须相邻(不是对角线)。这里有什么好的方法?我虽然从随机起点开始进行深度优先搜索,但对于这样一个简单的问题来说,这似乎有点矫枉过正。
【问题讨论】:
标签: arrays list search path tree
如果我猜对了,您正在寻找像连续数字这样的序列?
当我简化这个时:
9 4 3
0 7 2
5 6 1
So when the 1 is selected, you'd like to have path from 1 to 4 right ?我个人认为深度优先搜索将是最好的选择。这并不难,实际上很简单。想象一下,您选择了数字 2。您会记住数字 2 的位置,然后您可以查找最小的数字,直到有任何数字。当你完成这部分后,你只需对更大的数字做同样的事情。
您有两个堆栈,一个用于可能的方式,另一个用于最终路径。 在遍历数组时,您只是从可能性中弹出并将正确的可能性推入最终堆栈。 最好的方法是在不保存任何东西的情况下找到可能的最低数字,然后只寻找更高的数字并将它们存储起来,这样最后你就会得到从最高数字到最低数字的堆栈。
如果我弄错了,你的意思就像选择“感人”的元素,比如(从我的表中)9 0 7 6,这意味着内容无关紧要,那么你可以简单地选择一个number,存储所有可能性(它周围的每个元素),然后选择从 0 到存储值大小的随机数。当您选择一个时,您将其从这些存储的值中删除,但您保留它们。然后在新元素上运行它,只需将这些新元素添加到存储的元素中,这样随机数就会始终围绕这些选定的数字进行选择。
【讨论】: