ch.cpp

来自「求一个集合的子集的非递归解法」· C++ 代码 · 共 63 行

CPP
63
字号
#define N 8

#include <iostream>
#include <stack>

using namespace std;

struct snode
{
	int cnt, pos;
	bool poped;
};

int main()
{
	stack<snode> sk;
	snode nod, nod1, nod2;
	bool b[N]; int subsetnum = 0;
	
	for(int k=1; k<=N; k++)
	{
		memset(b, false, N);
		nod.cnt=0; nod.pos=0; nod.poped = false;
		sk.push(nod);
		while(!sk.empty())
		{
			nod = sk.top();
			sk.pop();
			if(nod.cnt==k)
			{
				for(int j=0; j<nod.pos; j++)
					if(b[j]) cout << j << ",";
				cout << endl;
				subsetnum ++;
				continue;
			}
			if(nod.pos==N) continue;

			if(!nod.poped)
			{
				nod.poped = true;
				sk.push(nod);
			}
			else
			{
				nod.poped = false;
				b[nod.pos++] = false;
				sk.push(nod);
				continue;
			}

			if(nod.pos<N)
			{
				b[nod.pos++] = true;
				nod.poped = false;
				nod.cnt++;
				sk.push(nod);
			}
		}
	}
	cout << subsetnum+1 << endl;
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?