我有一个m x m
二维数组,我想随机选择一个n
元素序列。元素必须相邻(不是对角线)。这里有什么好方法?我从一个随机起点开始深度优先搜索,但对于这样一个简单的问题来说,这似乎有些过分。
答案 0 :(得分:1)
如果我做对了,你正在寻找连续数字的序列吗?
当我简单地说:
9 4 3
0 7 2
5 6 1
所以当选择1时,你想要从1到4的路径对吗?我个人认为深度优先搜索将是最佳选择。这并不难,实际上非常简单。想象一下你选择了2号。你会记住2号的位置然后你可以找到最低的数字直到有。完成此部分后,您只需对更高的数字执行相同的操作。
你有两个堆栈,一个用于可能的方式,另一个用于最终路径。 通过数组时,您只是从可能性中弹出并将正确的数据推入最终的堆栈。 最好的方法是找到尽可能少的数字而不保存任何东西然后只是寻找更高的数字并存储它们,所以最后你会得到从最高数字到最低数字的堆栈。
如果我弄错了你的意思就像选择“触摸”的元素(从我的表中)9 0 7 6,这意味着内容无关紧要,那么你可以通过选择一个来做到这一点数字,存储所有可能性(它周围的每个元素),然后选择从0到存储值大小的随机数。当您选择一个时,将其从这些存储的值中删除,但保留它们。然后在新元素上运行它,你只需将这些新元素添加到存储的元素中,这样随机数就会总是围绕这些选定的数字进行选择。