全排列
#include <iostream>
using namespace std;
const int N = 20;
int n;
int path[N];
bool st[N];
void dfs(int u)
{
if(u==n)
{
for(int i=0;i<n;i++) cout<<path[i]<<' ';
cout<<endl;
return ;
}
for(int i=1;i<=n;i++)
if(!st[i])
{
st[i]=true;
path[u]=i;
dfs(u+1);
st[i]=false;
}
}
int main()
{
n=3;
dfs(0);
return 0;
}
输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
组合枚举
#include <iostream>
using namespace std;
const int N = 20;
int n,m;
int path[N];
void dfs(int u,int start)
{
if(u==m)
{
for(int i=0;i<m;i++) cout<<path[i]<<' ';
cout<<endl;
return ;
}
for(int i=start;i<=n;i++)
{
path[u]=i;
dfs(u+1,i+1);
}
}
int main()
{
n=4,m=2;
dfs(0,1);
return 0;
}
输出:
1 2
1 3
1 4
2 3
2 4
3 4