hdu_1027_Ignatius and the Princess II(全排列 stl next_permutation()的使用)
1 #include<iostream> 2 #include<algorithm> //注意头文件 3 using namespace std; 4 int main(){ 5 int a[1001]; 6 int n,m; 7 while(cin>>n>>m){ 8 for(int i=1;i<=n;i++) //生成一个字典序最小的序列 9 a[i]=i; 10 int b=1; 11 do{ 12 if(b==m) 13 break; 14 b++; 15 }while(next_permutation(a+1,a+n+1)); //此处需注意 第一个是a+1,最后一个是a+n 函数next_permutation()的排列范围是[first,last) 16 for(int i=1;i<n;i++) 17 cout<<a[i]<<" "; 18 cout<<a[n]<<endl; //注意输出格式 19 } 20 return 0; 21 }
注:
next_permutation():STL提供求下一个排列组合的函数。
定义有两种形式:
- bool next_permutation( BidirectionalIterator _First, BidirectionalIterator _Last );
- bool next_permutation( BidirectionalIterator _First, BidirectionalIterator _Last, BinaryPredicate _Comp );
返回值:如果没有下一个排列组合,返回false,否则返回true。每执行该函数一次,就会把新的排列放到原来的空间里。
注意其 排列范围是[first,last) 。