指数型
#include <iostream>
using namespace std;
const int N = 15;
int st[N],num[N];
int n;
void dfs(int u)
{
if(u > n)
{
for(int i = 1;i <= n ;i ++)
{
if(st[i] == 1)
cout <<i<<" ";
}
cout <<endl;
}
else
{
st[u] = 2;
dfs(u+1);
st[u] = 1;
dfs(u+1);
}
}
int main()
{
cin >> n;
dfs(1);
return 0;
}
排列型
#include <iostream>
using namespace std;
const int N = 12;
int n;
bool st[N];
int num[N];
void dfs(int u)
{
if(u > n)
{
for(int i = 1;i <= n;i ++)
{
cout <<num[i]<<" ";
}
cout <<endl;
}
else
{
for(int i = 1;i <= n;i ++)
{
if(st[i] == false)
{
st[i] = true;
num[u] = i;
dfs(u+1);
st[i] = false;
}
}
}
}
int main()
{
cin >> n;
dfs(1);
return 0;
}
组合型
#include <iostream>
using namespace std;
const int N = 110;
bool st[N];
int num[N];
int n,m;
void dfs(int u,int start)
{
if(u > m)
{
for(int i = 1;i <= m;i ++)
{
cout << num[i]<<" ";
}
cout <<endl;
}
else
{
for(int i = start ;i <= n;i ++)
{
if(st[i] == false)
{
st[i] = true;
num[u] = i;
dfs(u+1,i+1);
st[i] = false;
}
}
}
}
int main()
{
cin >> n>> m;
dfs(1,1);
return 0;
}