我有一组数字,我需要在尽可能密集的矩形网格上放置(=网格区域最小)。例如,如果我必须输入数字16,31和63,我可以将它们放入2x2-grid
1 6
3 0。
我认为解决任意数字集合问题的最佳方法是制作某种网络或树,它会尝试数字的每个排列和可以读取的方向。我很难找到一个合适的NextPosition() - 算法,它为网格添加一个数字并尝试给定数字的每个可能顺序,给定数字开始的位置和给定数字的方向。任何人都可以建议一种尝试每个可能位置的方法吗?
答案 0 :(得分:0)
为什么你这样做,什么标准决定哪个组合是你最终想要的(或者你是否正在处理所有这些组合),为什么不是你的网格的63部分,或者为什么不是你的网格2x3 ?
最后,如果您的网格太小而且非稀疏,您不想使用数组吗?
好。
然后我会将每个输入数字分成数字,并且对于每个第一个数字,尝试在网格中找到该数字。然后搜索下一个数字,看它是否是相邻的网格点。如果你找不到任何东西,你需要回溯到第一个数字的下一场比赛。如果没有现有事件,则需要再次开始寻找将最后一个数字添加到第一个数字旁边的空白区域,假设数字是两位数。如果不可能,您需要回溯到最后添加的数字等,或者说不能添加此号码。