生成全排列----离散数学及其应用伪代码实现

来源:互联网 发布:mac安装农行安全控件 编辑:程序博客网 时间:2024/04/30 19:32

生成{1, 2, 3, 4, 5, 6, 7, 8, 9}的全排列。

算法基于离散数学及其应用的伪代码,字典顺序


#include <stdio.h>int permutation(int* a, int len);int main(void){    int ret = 1;    int i = 0;    int A[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};    for (i = 0; i < 9; i ++)    {      printf("%d", A[i]);    }    printf("\n");    while (ret)    {        ret = permutation(A, 9);        for(i = 0; i < 9; i++)        {            printf("%d", A[i]);        }        printf("\n");    }    return 0;}void swap(int *a, int *b){    int tmp = 0;    tmp = *a;    *a = *b;    *b = tmp;}int permutation(int* a, int len){    int i = 0;    int j = len -2, k = len-1;    int r = len -1, s = 0;    int *p = a;    while (p[j] > p[j+1])    {        j -= 1;        if (j == -1)          return 0;    }    while (p[j] > p[k])        k -= 1;    swap(&p[j], &p[k]);    s = j+1;    while (r > s)    {        swap(&p[r], &p[s]);        r--;        s++;    }    return 1;}



原创粉丝点击