NOJ1103&next_permutation()

描述
全排列的生成就是對於給定的字符集或數集,用有效的方法將所有可能的全排列無重複無遺漏地枚舉出來。對給定的字符集中的字符規定一個先後關係,在此基礎上規定兩個全排列的先後是從左到右逐個比較對應的字符的先後,或根據給定的數集中的大小關係,規定兩個全排列的先後是從左到右逐個比較對應的數的大小,即依照字典序給出全排列。例如字符集{1,2,3},較小的數字較先,這樣按字典序生成的全排列是:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
給定n個整數,現請編程求它們所有的全排列。


輸入
輸入包括兩個行,第一行給出正整數n( 0 < n <=8), 第二個是 n個整數(大小範圍:[-10^4, 10^4])。


輸出
按字典序輸出這n個整數的全排列,每一行給出一個全排列。


樣例輸入
3
1 23 88


樣例輸出
1 23 88
1 88 23
23 1 88
23 88 1
88 1 23

88 23 1


C++中有專門用於全排列的next_permutation()函數,當其執行次數小於全排列次數時返回true,全排列結束後返回false。有兩個參數a.begin()和a.end()。

#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int n,tmp;
	cin>>n;
	deque<int> deq;
	while(n--)
	{
		cin>>tmp;
		deq.push_back(tmp);
	}
	sort(deq.begin(),deq.end());
	do
	{
		for(int i=0;i<deq.size();++i)
		{
			if(i!=0)
				cout<<" ";
			cout<<deq[i];
		}
		cout<<endl;
	}while(next_permutation(deq.begin(),deq.end()));
	return 0;
}


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