树的简单应用,代码如下,看注释即可
#include<iostream>
using namespace std;
int a[100]; //保存树节点的值
bool used[100]; //树节点是否被使用过
//1-n的排列 n为数的总层次 cur为当前的层次
void DfsArray(int n,int cur)
{
if(cur<n)
{
for(int i=1;i<=n;i++)
{
a[cur]=i;
DfsArray(n,cur+1);
}
}
else
{
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
}
//1-n的组合 n为数的总层次 cur为当前的层次
//组合在排列的基础上添加了剪枝
void DfsCombin(int n,int cur)
{
if(cur<n)
{
for(int i=1;i<=n;i++)
{
if(!used[i]) //当前节点没被使用过
{
a[cur]=i;
used[i]=true;
DfsCombin(n,cur+1);
used[i]=false; //递归回溯,当前节点设置为可用
}
}
}
else
{
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
}
int main()
{
int n;
cin>>n;
DfsCombin(n,0);
system("pause");
}