全排列

給定一組無重複數據,輸出數據全排列。

有兩種解法,一種是自己設計算法實現全排列,另一種是調用庫函數。

詳解思路這位博主的文章解釋得較爲詳細。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void dealFunc(vector<int> nums, vector< vector<int>> &vv, int left, int right)
{
	if ( left >= right) {
		vv.push_back(nums);
		return;
	}
	for ( int i = left; i <= right; i++ ) {
		swap( nums[left], nums[i]);
		dealFunc( nums, vv, left+1, right);
		swap( nums[left], nums[i]);
	}
}

int main(void)
{
	vector< vector<int>> vv;
	vector<int> nums;
	int val;
	while ( cin >> val ) {
		nums.push_back(val);
	}
	dealFunc( nums, vv, 0, nums.size()-1);

	for ( size_t i = 0; i < vv.size(); i++ ) {
		vector<int> &v = vv[i];
		for ( auto a : v )
			cout << ' ' << a;
		cout << endl;
	}
	return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(void)
{
	vector< vector<int>> vv;
	vector<int> nums;
	int val;
	while ( cin >> val ) {
		nums.push_back(val);
	}

	vector<int> v1(nums);
	vector<int> v2(nums);
	
	vv.push_back(nums);
	while ( prev_permutation( v1.begin(), v1.end()) )
		vv.push_back(v1);
	while ( next_permutation( v2.begin(), v2.end()) )
		vv.push_back(v2);

	for ( size_t i = 0; i < vv.size(); i++ ) {
		vector<int> &v = vv[i];
		for ( auto a : v )
			cout << ' ' << a;
		cout << endl;
	}
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章