题目链接:http://poj.org/problem?id=1833
下午研究了下1833,一个全排列问题,其中分析排列顺序并不容易,但是我们要感谢那些编写库函数的朋友,被我发现个全排列的函数next_permutation有的解释是这样的:
这是一个求一个排序的下一个排列的函数。如果要走遍所有的排列,你必须先排序。这是这两个函数使用需要注意的地方。
而其prev_permutation与之相反,是求一个排列的前一个排序。
这个题我原本的代码在vs10下运行正常,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include<iostream> #include<algorithm> using namespace std; int main() { int f[1028]; int t; cin>>t; while(t--) { int n,k; cin>>n>>k; for(int i=0;i<n;i++) cin>>f[i]; while(k--) next_permutation(f,f+n); cout<<f[0]; for(int i=1;i<n;i++) cout<<" "<<f[i]; cout<<endl; } return0; }
|
修改代码恢复老式输入输出结构代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
#include<iostream> #include<algorithm> using namespace std; int main() { int f[1028]; int t; scanf("%d", &t;); while(t--) { int n,k; scanf("%d%d", &n;, &k;); for(int i=0;i<n;i++) scanf("%d", &f;[i]); while(k--) next_permutation(f,f+n); printf("%d", f[0]); for(int i=1;i<n;i++) printf(" %d", f[i]); printf("n"); } return 0; }
|