1. 程式人生 > >給一個整數陣列,輸出所有可能的子集

給一個整數陣列,輸出所有可能的子集

1:迭代法

思路很簡單,就是用一個二進位制的數表示當前元素集合的狀態,狀態的第i位如果是0,說明當前集合沒有這個元素;如果是1,就是有這個元素,然後輸出。

//動態規劃?

int a[4] = { 1, 2, 3, 4 };
int t = 1<<4;
for (int i = 1; i <= t - 1; i++)
{
	cout<<"{";
	for (int j = 0; j <= 4; j++)
	{
	     if ((1 << j)&i)
		cout << a[j] << " ";
	}
	cout << "}" << endl;
}

2:遞迴法

思路也很簡單,就是把集合狀態用pos陣列存下來,pos[i]如果是0,說明當前集合沒有這個元素;如果是1,就是有這個元素,然後輸出.

//深搜?

void dfs(int a[], int pos[], int now,int len)
{
	if (now == len)
	{
		cout << "{";
		for (int i = 0; i < now; i++)
		{
			if (pos[i] == 1)
				cout << a[i] << " ";
		}
		cout << "}" << endl;
		return ;
	}
	pos[now] = 0;
	dfs(a, pos, now+1,len);
	pos[now] = 1;
	dfs(a, pos, now+1,len);
}
int main()
{
	int a[4] = {1, 2, 3, 4};
	int pos[4] = {0, 0, 0, 0};
	int now = 0;
	int len = 4;
	dfs(a, pos, now,len);
	return 0;
}