1つの記事ですべて読む

完全な順列とは何かを理解しますか?

一般に、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;
}

配列全体を理解することは、再帰を学習し、フォローアップでの列挙や枯渇などの多くの問題を解決するのに非常に役立ちます。

Gu's Cottageから出てきて、ポインタを与えることを歓迎します、あなたのサポートに感謝します!

おすすめ

転載: blog.csdn.net/weixin_44723496/article/details/109023783
おすすめ