火车进站、出站问题

 

说白了还是递归写不明白,不知道怎么去递归。那么找到一个兄弟的代码非常具有教育意义,虽然写的不是很好,但是思路看起来非常清晰。

首先我们确定了这个东西的行为就是栈的行为了,而且想找到所有的方案考虑用递归去实现这个问题。

那么问题来了递归到底咋写。

我们首先要确定好输入和输出,输出不用说了我们只想要这些方案的种类,包含了车的号码。那么用一个列表来存储最为合适,里面都是一个个小列表装载着每一种方案的出车方式。

  train_out =[]  #这个就是我们的输出了

  那么输入呢?输入一定要有等待出站的状态,和准备要进站的状态,以及已经走了的车。(例如1进1出后就不用管1了,这个1已经走了)

  那么对应的就设置为:

def train_io(wait_in,wait_out,leave):

  wait_in是等待进入的车,wait out是等待出去的车。

  先考虑结束条件:这个很好考虑,车站内外都没有车了就结束了

  首先当然是要从车站里来看这个车走还是不走,也就是说,我们要把当前的时间暂停。这是什么操作?我们需要用别的变量来模仿一下当前站内出车和当前站内不出车的情况:

  先进入一个车:wait_out_.append(wait_in_.pop(0)) 等待进入的车进来一个,加入到等待出去的车中。

  然后进行递归train_io()也就是说这个车进来后 还可能进来车,或者出去车。递归都结束后代表着进来车或者出去车的情况已经都发生了,现在不会进来车了。那么就要出去车

  出车:leave_.append(wait_out_.pop())   等待出去的车走一个,到最终离开的车中。

  同理,出去车之后,马上就仍然要进行一次递归

  注意这里的pop操作是在复制的变量上进行的。

 

posted @ 2021-07-13 17:32  灰人  阅读(819)  评论(0)    收藏  举报