zoukankan      html  css  js  c++  java
  • 递归改非递归

    #include <iostream>
    #include <stack>
    
    using namespace std;
    
    int n, m;
    
    // void dfs(int u, int sum, int state)
    // {
    //     // 0
    //     if(sum + n - u < m) return;
    //     if(sum == m)
    //     {
    //         for(int i = 0; i < n; i++)
    //             if(state >> i & 1)
    //                 cout << i + 1 << " ";
    //         cout << endl;
    //         return;
    //     }
    //     dfs(u + 1, sum + 1, state | 1 << u);
    //     // 1
    //     dfs(u + 1, sum, state);
    //     // 2
    // }
    
    struct State
    {
        int pos, u, sum, state;    
    };
    int main()
    {
        cin >> n >> m;
        // dfs(0, 0, 0);
        
        stack<State> stk;
        stk.push({0, 0, 0, 0});
        while(!stk.empty())
        {
            auto t = stk.top(); stk.pop();
            if(t.pos == 0)
            {
                if(t.sum + n - t.u < m) continue;
                if(t.sum == m)
                {
                    for(int i = 0; i < n; i++)
                    if(t.state >> i & 1)
                    cout << i + 1 << " ";
                    cout << endl;
                    continue;
                }
                t.pos = 1;
                stk.push(t);
                stk.push({0, t.u + 1, t.sum + 1, t.state | 1 << t.u});
            }
            else if(t.pos == 1)
            {
                t.pos = 2;
                stk.push(t);
                stk.push({0, t.u + 1, t.sum, t.state});
            }
        }
    }
  • 相关阅读:
    java之数组使用以及拓展
    Java之数组介绍
    方法
    break&continue
    networkmanager is not running 网络管理没有运行
    CentOS-7修改IP
    操作系统
    计算机基础理论
    编码和解码
    pyQuery库
  • 原文地址:https://www.cnblogs.com/vlyf/p/13949234.html
Copyright © 2011-2022 走看看