hdu 1027 Ignatius and the Princess II 全排列
2011-07-28 20:31
495 查看
#include<stdio.h> int a[1100]; void permutation(int n) { int i,j,k; for(i=n-1;1;i--) if(a[i-1]<a[i])//从后边开始找到第一个比它后面的树小的数 break; j=i-1; for(i=n-1;1;i--) if(a[i]>=a[j])//从后边开始找到不比a[j]小的数 break; k=i;//交换 i=a[j]; a[j]=a[k]; a[k]=i; i=j+1; k=n-1; while(i<k)//把a[j]以后的逆序 { j=a[i]; a[i]=a[k]; a[k]=j; i++; k--; } } int main() { int i,n,m; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<n;i++) a[i]=i+1; for(i=1;i<m;i++) permutation(n); printf("%d",a[0]); for(i=1;i<n;i++) printf(" %d",a[i]); printf("\n"); } return 0; }
还有就是用next_permutation()
#include <stdio.h> #include <algorithm> using namespace std; #define MAX 1005 int N,M,a[MAX]; int main(void) { while(scanf("%d %d",&N,&M)!=EOF) { int i; for(i=1; i<=N; i++) a[i]=i; for(i=1; i<M; i++) next_permutation(a+1,a+N); printf("%d",a[1]); for(i=2; i<=N; i++) printf(" %d",a[i]); printf("\n"); } return 0; }
相关文章推荐
- 全排列算法 HDU - 1027 Ignatius and the Princess II
- HDU 1027 Ignatius and the Princess II 排列生成
- HDU 1027 Ignatius and the Princess II (STL全排列)
- HDU 1027 Ignatius and the Princess II (产生第m大的排列,STLmap中的next_permutation(array,array+n);)
- hdu 1027 Ignatius and the Princess II【dfs 排列组合】
- hdu 1027 Ignatius and the Princess II (STL 全排列)
- HDU 1027 Ignatius and the Princess II 全排列
- 排列-hdu_1027_Ignatius and the Princess II
- HDU_1027_Ignatius and the Princess II_全排列
- HDU 1027 Ignatius and the Princess II【求第M个排列】
- hdu 1027 Ignatius and the Princess II(产生第m大的排列,next_permutation函数)
- hdu 1027 Ignatius and the Princess II(STL全排列)
- HDU-1027(Ignatius and the Princess II)(全排列dfs())
- 【HDU 1027 Ignatius and the Princess II】+ 排列组合
- hdu 1027 Ignatius and the Princess II
- HDU 1027 Ignatius and the Princess II
- HDU 1027 Ignatius and the Princess II
- HDU 1027.Ignatius and the Princess II【全排列】【数学】【1月3】
- HDU 1027 Ignatius and the Princess II 全排列
- HDU1027——Ignatius and the Princess II(全排列)