递归排序:
1.要有边界进行回溯
2.要有可迭代对象进行迭代
3.可抽象为坑位确定有几个dfs
4.可将数据抽象为而二叉树进行分析
#include<bits/stdc++.h>
using namespace std;
const int N=10;
int st[N];
bool state[N];
int s[N];
int n;
void dfs(int u)
{
if(u==n)//边界判断(从第0位开始判断条件就是==)
{
for(int i=0;i<n;i++)
{
cout<<s[i]<<" ";
}
cout<<endl;
return;
}
for(int i=0;i<n;i++)//对初始数据进行循环选择***
{
if(!state[i])//要选数据的是否已选的判断
{
state[i]=true;
s[u]=st[i];
dfs(u+1);
state[i]=false;
while(i+1<n&&st[i+1]==st[i]) i++;//去重(使用while判断进行去重)****
}
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>st[i];
sort(st,st+n);//排序以便去重****
dfs(0);
return 0;
}