火车进栈

using namespace std;
int n, cnt = 20;
vector<int>st3;
stack<int>st2;
int st1 = 1;
void dfs()
{
  if(!cnt)return ;
  if(st3.size() == n ) // 1
  {
          cout << "1\n" ; 
      cnt --;
      for(auto x : st3)cout << x;
      cout << endl;
      
  }
  if(st2.size()) // 2
  {
          cout << "2->" ; 
    st3.push_back(st2.top());
    st2.pop();
    dfs();
    
    st2.push(st3.back());
    st3.pop_back();
  }
  if(st1 <= n){ // 3 
  cout << "3->" ; 
    st2.push(st1);
    st1 ++;
    dfs();
    
    st2.pop();//恢复现场是在回溯的时候用的
    st1 --;//在第二步dfs回溯后,会改变父节点的st2和st1
  }

}
int main()
{
  cin >> n;
  dfs();
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 13:47
机械打工仔:你自己匿名可以,这么好的公司就别给它匿名了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 13:54
点赞 评论 收藏
分享
昨天 12:17
已编辑
商丘师范学院 Java
后来123321:别着急,我学院本大二,投了1100份,两个面试,其中一个还是我去线下招聘会投的简历,有时候这东西也得看运气
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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