题解 | #火车进站#

火车进站

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

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

/**
 * 要求
 * 字典序列就是 从小到大排序
 * 栈: 先进后出,后进先出,出口和入口一样,只有栈顶
 * 火车编号: 1~9
 * 求所有火车出站方案,并以字典序列输出
 * 
 * 分析
 * 
 */

let [row, num, trains] = [0, 0, undefined]
rl.on('line', function (line) {
    row++

    if(row === 1){
        // 保存火车数量
        num  = Number(line)
    }else if(row === 2){
        // 保存所有火车
        trains = line.split(' ').map(Number)

        // 保存序列
        const res = []

        function dfs(list, inL, outL){
            // 保存一个出栈序列
            if(outL.length === num){
                res.push(outL.join(' '))
                return
            }

            // 如果站外还有列车,就可以选择进站
            if(list.length){
                inL.push(list.shift())
                dfs(list, inL, outL)
                list.unshift(inL.pop())
            }

            // 如果站内还有列车就可以选择出站
            if(inL.length){
                outL.push(inL.pop())
                dfs(list, inL, outL)
                inL.push(outL.pop())
            }
        }

        dfs(trains, [], [])

        res.sort().forEach(item=>console.log(item))

    }  
});

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务