完全な順列とは何かを理解しますか?
一般に、1からnまでのn個の整数を特定の順序で配置した結果を、これらのn個の整数の順列と呼びます。完全な順列とは、これらのn個の整数によって形成できるすべての順列を指します(
たとえば、1、2)。 、および3。整数に関して、
その完全な配置は次のとおりです。12
3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
3つの整数の配置全体を手作業でエラーなしですばやく列挙できます。10または100の場合はどうでしょうか。
以下では、プログラムを使用して完全な配置を実現します
方法1:再帰
#include <bits/stdc++.h>
using namespace std;
int n;
int res[10001], vis[10001];
void dfs(int step){
if(step == n+1){
for(int i = 1; i <= n; i++){
cout<<res[i]<<' ';
}
cout<<endl;
return;
}
for(int i = 1; i <= n; i++){
if(!vis[i]){
vis[i] = 1;
res[step] = i;
dfs(step+1);
vis[i] = 0;
}
}
}
int main(){
cin>>n;
memset(res, 0, sizeof(res));
memset(vis, 0, sizeof(vis));
dfs(1);
return 0;
}
方法2:C ++ STL完全順列関数の助けを借りて
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int s[10001];
for(int i = 0; i < n; i++){
s[i] = i+1;
}
do{
for(int i = 0; i < n; i++){
cout<<s[i]<<' ';
}
cout<<endl;
}while(next_permutation(s, s+n));
return 0;
}