總結: 全排列 和 全部子集 (深搜…
暴力列舉
(參照劉汝佳程式碼)
找出集合中的全部排列組合:
#include <cstdio>
#include <iostream>
using namespace std;
#define MAX 20
void print_permutation(int n,int *p,int *a,int
cur) //引數列表 n:個數
p:需要排列元素列表
{
//a: 輸出儲存的列表 cur: 遞迴時記錄當前排列好的個數
int
i,j;
if(cur ==
n)
{
for(i = 0; i < n; ++i)
printf("%d ",a[i]);
printf("\n");
}
else
{
for(i = 0; i < n; ++i)
{
if(!i || p[i] != p[i-1])
//消除元素重複的情況. 例如:(1,1,1)排除輸出27次
{
int c1 = 0, c2 = 0;
for(j = 0; j < cur; ++j) if(a[j]
== p[i]) c1++;
for(j = 0; j < n; ++j) if(p[i] ==
p[j]) c2++;
if(c1 < c2)
{
a[cur] = p[i];
print_permutation(n,p,a,cur+1);
}
}
}
}
}
int main()
{
int p[MAX] =
{2,1,3};
int
a[MAX];