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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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段,有石头或水[1,0,0,1,1,1,0,1,0,1…]。河岸一侧有一只海龟,它可以以x的速度移动,x的速度意味着它可以一次性穿过河流的x段。 在以x速度交叉后,他可以获得这三种速度中的任意一种,x,x+1,x-1。 他可以向两个方向移动 现在1代表石头,0代表水。 如果乌龟跳入水中,它就会死亡,但是如果它在石头上跳跃,那么它可以根据给定的规则获得新的速度 给定分段数(n)、分段分布(数组[n])和初始速度(x)。 发现海龟有没有可能跑到银行的另一边 我已经递归地解决了这个问

河流从宽度上分为n段,有石头或水[1,0,0,1,1,1,0,1,0,1…]。河岸一侧有一只海龟,它可以以x的速度移动,x的速度意味着它可以一次性穿过河流的x段。 在以x速度交叉后,他可以获得这三种速度中的任意一种,x,x+1,x-1。 他可以向两个方向移动

现在1代表石头,0代表水。 如果乌龟跳入水中,它就会死亡,但是如果它在石头上跳跃,那么它可以根据给定的规则获得新的速度

给定分段数(n)、分段分布(数组[n])和初始速度(x)。 发现海龟有没有可能跑到银行的另一边

我已经递归地解决了这个问题,但无法使用非递归方法


乌龟在河的一边| | 1,0,1,1,0,0,1,1,1,0,1,….| | | | |河的另一边

基本上这是一个简单的搜索问题,其中状态是乌龟当前位置及其速度的元组。它可以使用堆栈(深度优先)或队列(宽度优先搜索)实现,而无需递归。下面是一个在Python中使用队列(即广度优先)的实现:

从集合导入数据
def跨河(河流,位置=0,速度=1):
队列=deque([(位置,速度,[]))
访问=设置()
排队时:
位置、速度、路径=queue.popleft()
#如果河的最后一块石头,返回跳到那里的顺序
如果位置==len(河流)-1:
返回路径
#看看我们以前是否来过这里
如果(位置、abs(速度))处于以下位置:
持续
已访问。添加((位置、abs(速度)))
#对于所有可能的跳转,将新状态添加到队列中
对于[-1,0,+1]中的i:#速度变化
对于k in[-1,+1]:#改变方向
新速度=(速度+i)*k
新位置=位置+新\u spd

如果0,你的递归解决方案是什么?这是一种蛮力方法,1)我经常检查海龟死亡的情况,这可能是所有三种速度都会进水的情况。2) 如果在任何时间点,银行和当前位置之间的距离小于x,则它始终可以进行有效退出。基于这种情况和其他一些情况,我提出了一种递归方法,允许每个当前位置在前面可能的位置递归。