c_cpp 非递归n! C中的排列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 非递归n! C中的排列相关的知识,希望对你有一定的参考价值。
#include<stdio.h>
#include<time.h>
void roll(int a[],int l,int r){
//roll [l,r) leftward
int tmp=a[l],i;
for(i=l;i<r-1;i++)
a[i]=a[i+1];
a[r-1]=tmp;
}
void rollR(int a[],int l,int r){
//roll [l,r) rightward
int tmp=a[r-1],i;
for(i=r-1;i>l;i--)
a[i]=a[i-1];
a[l]=tmp;
}
void print(int a[],int len){
int i;
for(i=0;i<len;i++){
printf("%2d ",a[i]);
}
printf("\n");
}
int main(){
int n,i,rb;
long long int cnt=0;
scanf("%d",&n);
int a[n];
//initialize values
for(i=0;i<n;i++)
a[i]=i+1;
printf("Listing %d! permutation\n",n);
clock_t start=clock();
while(1){
rb=n;
for(i=0;i<n;i++){
cnt++;
roll(a,0,n);
}
while(a[rb-1]==rb&&rb>0){
rb--;
roll(a,0,rb);
}
if(rb==0)
break;
}
printf("---\nDone(%.2lf ms). %d permutations.",(double)(clock()-start)/CLK_TCK*1e3,cnt);
}
以上是关于c_cpp 非递归n! C中的排列的主要内容,如果未能解决你的问题,请参考以下文章
汉诺塔的非递归实现(栈)
c_cpp 归并排序的非递归实现,慢于标准库
c_cpp 树的前序,中序和后序的非递归实现
全排列的非递归算法
C语言的两个问题: 所有的递归程序均可以用非递归算法实现?递归函数中的形式参数是自动变量吗? c语言中
递归函数生成全排列