1.c++函数
next_permutation,重新排列范围内的元素[第一,最后一个)返回按照字典序排列的下一个值较大的组合。
返回值:如果有一个更高的排列,它重新排列元素,并返回true;如果这是不可能的(因为它已经在最大可能的排列),它按升序排列重新元素,并返回false。
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{int a[5];
for (int i = 0; i < 5; i++)
a[i] = i;
do
{
for (int i = 0; i < 5; i++)
cout<<a[i];cout<<endl;
} while (next_permutation(a, a+5));
for (int i = 0; i < 5; i++)
cout<<a[i];
cout<<endl;
return 0;
}
2.dfs
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int visit[11],num[11];
int n;
void dfs(int depth)
{
if(depth>n)
{
for(int j=1;j<=n;j++)
{
cout<<num[j]<<"";
}
cout<<endl;
}
else
{
for(int i=1;i<=n;i++)
{
if(!visit[i])
{
visit[i]=1;
num[depth]=i;
dfs(depth+1);
visit[i]=0;
}
}
}
}
int main(){
while(cin>>n)
{
memset(visit,0,sizeof(visit));
dfs(1);
}
}