• C语言实现全排列


    实现全排列,递归实现

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 int n=0;
     4 
     5 void swap(int *a, int *b)
     6 {
     7      int m;
     8      m=*a;
     9      *a=*b;
    10      *b=m;
    11 }
    12 void perm(int list[], int k, int m)
    13 {
    14      int i;
    15      if(k==m)
    16      {
    17              for(i=0;i<=m;i++)
    18                               printf("%d ",list[i]);
    19              printf("
    ");
    20              n++;
    21      }
    22      else
    23      {
    24          for(i=k;i<=m;i++)
    25          {
    26                           swap(&list[k],&list[i]);
    27                           perm(list, k+1, m);
    28                           swap(&list[k], &list[i]);
    29          }
    30      }
    31 }       
    32 int main(void)
    33 {
    34     int list[]={1,2,3,4,5,6,7};
    35     perm(list,0,6);
    36     printf("total:%d
    ",n);
    37     system("pause");
    38     return 0;
    39 }                  

    求字典顺序的下一个全排列

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 void swap(int *a, int *b)
     4 {
     5      int m;
     6      m=*a;
     7      *a=*b;
     8      *b=m;
     9 }
    10 void perm(int list[], int len)
    11 {
    12      int i=0;
    13      int k=0;
    14      int n=len;
    15      int j=1;
    16      for(;j<=len;j++)
    17      {
    18                      if(list[j-1]<list[j])
    19                                           i=j;
    20      }
    21      for(j=1;j<=len;j++)
    22      {
    23                         if(list[i-1]<list[j])
    24                                              k=j;
    25      }
    26      swap(&list[i-1],&list[k]);
    27      for(j=0;j<=i;j++)
    28      {
    29                       printf("%d ",list[j]);
    30      }
    31      for(j=len;j>i;j--)
    32      {
    33                        printf("%d ",list[j]);
    34      }
    35 }
    36 int main(void)
    37 {
    38     int list[]={7,6,4,1,3,5,2};
    39     perm(list,6);
    40     system("pause");
    41     return 0;
    42 }                  
  • 相关阅读:
    openVolumeMesh example 程序学习
    使用字符串创建java 对象
    HDU-1501-Zipper
    UVA-10285-Longest Run on a Snowboard
    HDU-2182-Frog
    HDU-2044-一只小蜜蜂
    POJ-1163-The Triangle
    HDU-1159-Common Subsequence
    HDU-2069-Coin Change
    HDU-4864-Task
  • 原文地址:https://www.cnblogs.com/xianzhedeyu/p/3822946.html
Copyright © 2020-2023  润新知