zoukankan      html  css  js  c++  java
  • 火车进站

    给定 N 辆火车,每辆火车以数字1-9编号,火车站只有一个方向进出,同时停靠在火车站的列车中,只有后进站的出站了,先进站的才能出站。求所有的火车出站的方案。

    例如给定输入
    1 2 3
    输出为
    1 2 3
    1 3 2
    2 1 3
    2 3 1
    3 2 1

    该问题属于栈的问题,可以用递归的思想解决,即每次操作只有两种选项:
    1.输入的元素压栈;
    2.栈顶的元素出栈;

    代码如下

    def f(arr1,arr2):  # arr1含栈内元素,aar2含待入栈元素
        if len(arr1)==0 and len(arr2)==0:
            return []
        elif len(arr1)==0 and len(arr2)>0:  # 入栈
            return f(arr2[0:1], arr2[1:])
        elif len(arr1)>0 and len(arr2)==0:  # 出栈
            return [arr1[::-1]]
        else:
            out1 = f(arr1+arr2[0:1], arr2[1:])  # 入栈
            out2 = f(arr1[:-1], arr2)  # 出栈
            for i in out2:
                i.insert(0,arr1[-1])
            return out1+out2
    
    arr = [1, 2, 5, 3]
    out = f([],arr)
    for i in sorted(out):
        print(i)
    

    运行结果

    [1, 2, 3, 5]
    [1, 2, 5, 3]
    [1, 3, 5, 2]
    [1, 5, 2, 3]
    [1, 5, 3, 2]
    [2, 1, 3, 5]
    [2, 1, 5, 3]
    [2, 3, 5, 1]
    [2, 5, 1, 3]
    [2, 5, 3, 1]
    [3, 5, 2, 1]
    [5, 2, 1, 3]
    [5, 2, 3, 1]
    [5, 3, 2, 1]
    
  • 相关阅读:
    图形设计 X11
    软件安装 RPM SRPM YUM
    如何将excel表格中的纯数字删掉 空白行,然后删除
    考试机
    程序编译与运行
    基础设定与备份策略
    开机流程 模块管理 Loader
    让所有Excel数据格全部乘 某个数
    转:JDK1.8-Stream()使用详解
    转:IK分词原理
  • 原文地址:https://www.cnblogs.com/bill-h/p/14317497.html
Copyright © 2011-2022 走看看