递归改非递归

#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}); } } }

__EOF__

本文作者刘一凡
本文链接https://www.cnblogs.com/vlyf/p/13949234.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ManateeFan  阅读(120)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示