如何找到100个移动目标之间的最短路径?(包括现场演示。)
背景 此图说明了问题: 我可以控制红色圆圈。目标是蓝色三角形。黑色箭头指示目标将移动的方向。 我想以最少的步骤收集所有目标。 每转一圈,我必须向左/向右/向上或向下移动1步。 每转一圈,目标也会根据板上显示的方向移动1步。 演示版 我已经在Google appengine上对此问题进行了可播放的演示。 如果有人能击败目标分数,我将非常感兴趣,因为这表明我当前的算法不够理想。(如果管理成功,则应打印出祝贺消息!) 问题 我当前的算法在扩展目标数量方面确实非常糟糕。时间成倍增加,对于16条鱼,已经是几秒钟了。 我想为32 * 32的电路板尺寸和100个移动目标计算答案。 题 什么是计算收集所有目标的最小步骤数的有效算法(理想情况下为Javascript)? 我尝试过的 我当前的方法基于备忘录,但是它非常缓慢,我不知道它是否总是会产生最佳解决方案。 我解决了子问题“收集给定目标集并最终达到特定目标的最小步骤数是多少?”。 通过检查先前访问过的目标的每个选择,可以递归地解决子问题。我认为总是最好的方法是尽快收集先前的目标子集,然后尽快从最终位置移至当前目标(尽管我不知道这是否是一个有效的假设)。 这导致要计算的n * 2 ^ n状态非常迅速地增长。 当前代码如下所示: var DX=[1,0,-1,0]; var DY=[0,1,0,-1]; // Return the location of the given fish at time t function getPt(fish,t) { var i; var x=pts[fish][0]; var …