HJ77 火车进站

 火车进站问题等同于括号生成[1]。
 BM60 括号生成。

给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。
例如,给出n=3,解集为:"((()))", "(()())", "(())()", "()()()", "()(())"

 把“(”认为进栈操作,“)”认为出栈操作,就快可以求解火车进站问题。
我的代码:

#include
#include
#include
#include 
#include 
#include 
class BitVector{
public:
    BitVector():m_cap(32),m_size(0){}
    void push_back(uint32_t v){
        v=(v&0x0001)<>i;
        return v;
    }
    uint32_t size() const{return m_size;}
    uint32_t m_value=0;
    uint32_t m_cap:16;
    uint32_t m_size:16;
};
static inline void print_flag(BitVector& act){

    for(int i=0;i &actions,
                  BitVector act,int in,int out,
                  int n){
    if(2*n==act.size()){
        actions.push_back(act);
        //print_flag(act);
        return;
    }
    if(in&train,
                    std::vector& output){
    int index=0;
    std::vector q;
    for(int i=0;i res;
    std::vector train;
    std::vector output;
    std::cin>>n;
    for(int i=0;i>v;
        train.push_back(v);
    }
    output.resize(n,0);
    BitVector state;
    backTracking(res,state,0,0,n);
    std::vector> comb;
    for(int i=0;i& a,const std::vector&b){
        bool ret=false;
        for(int i=0;i

 博客[2]的解法,不过不太容易理解。

#include
#include
#include
#include
using namespace std;
static inline void print_path(const std::vector&path){
    for(int i=0;i>&res,
         std::vector&train,
         std::vector&path,
         std::stack&s,
         int x){
    if(x==train.size()&&s.empty()){
        res.push_back(path);
        //print_path(path);
        return;
    }

    if(x train={1,2,3};
    std::vector> result;
    std::vector path;
    std::stack s;
    dfs(result,train,path,s,0);
    sort(result.begin(),result.end());//结果按照字典序排序
    for(int i=0;i

[1]括号生成-C++递归解法
[2] HJ77火车进站

你可能感兴趣的:(HJ77 火车进站)