题解 | #火车进站#

火车进站

https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109

# 初始化一个空列表,用于存储所有可能的出站顺序
res = []

# 定义深度优先搜索函数
# wait: 等待进站的火车列表
# stack: 当前在站内的火车栈(后进先出)
# out: 已经出站的火车列表
def dfs(wait, stack, out):
    # 当等待进站和站内火车都为空时,表示所有火车都已出站
    # 此时,将出站顺序添加到结果列表中
    if not wait and not stack:
        res.append(' '.join(map(str, out)))
    
    # 如果还有火车等待进站
    # 则选择一辆火车进站(入栈),并继续搜索
    if wait: 
        dfs(wait[1:], stack + [wait[0]], out)
    
    # 如果站内还有火车(栈不为空)
    # 则可以选择一辆火车出站(出栈),并继续搜索
    if stack: 
        dfs(wait, stack[:-1], out + [stack[-1]])

# 无限循环,直到捕获到异常(例如输入结束)
while True:
    try:
        # 读取火车总数和进站编号列表
        n, nums = int(input()), list(map(int, input().split()))
        
        # 调用深度优先搜索函数,从初始状态开始搜索所有可能的出站顺序
        dfs(nums, [], [])
        
        # 对所有可能的出站顺序进行排序,并输出
        for i in sorted(res):
            print(i)
        
        # 清空结果列表,为下一组输入做准备(如果有的话)
        res.clear()
    
    except:
        # 捕获异常,跳出循环(通常是因为输入结束)
        break

全部评论

相关推荐

头像
2024-12-14 23:12
携程_移动安全研发
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务