漫画算法:铁轨问题

漫画算法:铁轨问题_第1张图片
漫画算法:铁轨问题_第2张图片
漫画算法:铁轨问题_第3张图片
漫画算法:铁轨问题_第4张图片

这个题目是铁轨问题,某城市有一个火车站,铁轨铺设如下图所示,有n节车厢从A方向驶入车站,按进站顺序编号为1~n。你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶出车站。例如,出栈顺序(5 4 1 2 3)是错误,但(5 4 3 2 1)是正确。

漫画算法:铁轨问题_第5张图片

为了重组车厢,你可以借助中转站C。这是一个可以停放任意多节车厢的车站,但由于末端封顶,驶入C的车厢必须按照相反的顺序驶出C。对于每个车厢,一旦从A移入C,就不能再回到A了;一旦从C移入B,就不能回到C了。换句话说,在任意时刻,只有两种选择:A→C和C→B。

漫画算法:铁轨问题_第6张图片
漫画算法:铁轨问题_第7张图片
漫画算法:铁轨问题_第8张图片
漫画算法:铁轨问题_第9张图片
漫画算法:铁轨问题_第10张图片
漫画算法:铁轨问题_第11张图片
漫画算法:铁轨问题_第12张图片
漫画算法:铁轨问题_第13张图片


比如我们想知道1,2,4,5,3是否符合题目要求,可以做以下判断 ,B处的1是否与A处的1相同:相同,继续判断(因为A处的1号车厢可以先进入C,然后从C进入B,符合题目要求)。

漫画算法:铁轨问题_第14张图片

判断B处的2与A处的2是否相同:相同,继续判断。此处与上面同理,2可以从A进入C,然后从C进入B,符合题意。

漫画算法:铁轨问题_第15张图片

判断B处的4与A处的3是否相同:不同。将A方向的3号车厢进栈C,继续判断。

漫画算法:铁轨问题_第16张图片

判断B处的4与A处的4是否相同,相同,继续判断。

漫画算法:铁轨问题_第17张图片

判断B处的5与A处的5是否相同,相同,继续判断。

漫画算法:铁轨问题_第18张图片

这里好像出问题了,A方向的5号车厢,它后面没有车厢了,那怎么办?别忘了,在C方向还有一个3车厢,拿它与B方向的3号车厢作比较,相同!看来1,2,4,5,3是正确的顺序。

漫画算法:铁轨问题_第19张图片


看来,要想符合题意,B处的每一个车厢都要进行四次比较:


1. 当B处车厢不等于A处车厢并且也不等于C的栈顶元素时,则将A处的车厢入栈C中

2. 当A处车厢等于B处车厢时,则可直接进行下一次操作,A、B都加1

3. 当栈C的栈顶车厢等于B处时,弹出栈C栈的元素,并且B加1

4. 当上述三个条件都不满足时,退出

漫画算法:铁轨问题_第20张图片
漫画算法:铁轨问题_第21张图片


最后给出本题代码,请大家仔细阅读,难懂的地方小猿已经打上了注释,如果还不懂,请在下面留言,小猿有时间就会给大家解答


代码请关注公众号查看:猿是源马是码


漫画算法:铁轨问题_第22张图片

你可能感兴趣的:(漫画算法:铁轨问题)