Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 算法:在有限移动约束下遍历所有数组元素_Algorithm - Fatal编程技术网

Algorithm 算法:在有限移动约束下遍历所有数组元素

Algorithm 算法:在有限移动约束下遍历所有数组元素,algorithm,Algorithm,你好 我有一个大小为[N][N]的二维数组,它将表示一个包含N行和N列的矩形区域/地图 假设我选择中间作为起点(或其他任何地方),我希望在必须重置回起点之前,在所有元素中只移动X次。然后我可以走我走过的路,但那会浪费一个转弯 我只是想知道是否有一个特定的算法来解决这个问题,这样我就可以和我目前的方法进行比较,我现在的方法只是存储我已经做过的动作。(相当混乱的tbh) 提前谢谢。看起来你说的是回合制游戏?所以我认为你不应该把它们看作是转折点,而应该把它们看作目标,而不是用a来判断离目标有多少步远,

你好

我有一个大小为[N][N]的二维数组,它将表示一个包含N行和N列的矩形区域/地图

假设我选择中间作为起点(或其他任何地方),我希望在必须重置回起点之前,在所有元素中只移动X次。然后我可以走我走过的路,但那会浪费一个转弯

我只是想知道是否有一个特定的算法来解决这个问题,这样我就可以和我目前的方法进行比较,我现在的方法只是存储我已经做过的动作。(相当混乱的tbh)


提前谢谢。

看起来你说的是回合制游戏?所以我认为你不应该把它们看作是转折点,而应该把它们看作目标,而不是用a来判断离目标有多少步远,然后假设目标有一个值,除以达到目标所需的转折点的数量,然后选择最高的结果作为你当前的目的地,下一轮你将不得不重新考虑你的战略

我试着让我的答案更清楚,每转一圈都做下面的事情

  • 确定目标的价值
    • 使用一个简单的方法确定实现目标所需的步骤数量
    • 计算所需的圈数(
      Math.Ceil(steps/stepsPerTurn)
    • 以最少的旋转次数确定具有最高值的对象
    • 实现这一目标

  • 这里有一个不是最优的策略,但它很简单,相当有效,而且您不需要保存一个大的存储列表,也不需要进行花哨的计算或编码

    从当前点开始,一直走到一堵墙。下台阶,向左走。保持前后之字形。如果你到达底部,重新开始,以类似的方式Z字形覆盖上半部分

    如果你画画的步子用完了,只需径直走向你之前所在的位置,然后继续画画


    这个算法不是最优的,但可能有10行代码和2个变量。

    问题是什么?你想知道给定N的最小X是什么,相关的算法是什么吗?最小X不是一个有趣的问题。。。X必须至少足以让他到达最远的点,如果他从中间开始,大约是N,如果他从角落开始,大约是2N。我想他需要一种算法,能够以最少的行走次数覆盖整个电路板。隐马尔可夫模型。。