Chinaunix首页 | 论坛 | 博客
  • 博客访问: 50737
  • 博文数量: 27
  • 博客积分: 716
  • 博客等级: 上士
  • 技术积分: 285
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-31 11:12
文章分类

全部博文(27)

文章存档

2012年(8)

2011年(19)

我的朋友

分类: C/C++

2011-09-28 16:21:21

  1. #include <stdio.h>

  2. #define MAX 4
  3. void perm(int *, int, int);

  4. void main()
  5. {
  6.     int array[MAX] = {1,2,2,3};

  7.     perm(array,0,MAX-1);
  8. }

  9. void perm(int *p, int k, int m)
  10. {
  11.     int i;
  12.     int tmp;

  13.     if(k == m) {
  14.         for(i = 0; i <= m; i++)
  15.             printf("%d ", p[i]);
  16.         printf("\n");
  17.     }
  18.     else {
  19.         for(i = k; i <= m; i++) {
  20.             int j,mark = 0;

  21.             for(j = k; j < i; j++) {
  22.                 if(p[j] == p[i]) {mark = 1;break;}
  23.             }
  24.             if(!mark) {
  25.                 tmp = p[i];
  26.                 p[i] = p[k];
  27.                 p[k] = tmp;

  28.                 perm(p,k+1,m);

  29.                 tmp = p[i];
  30.                 p[i] = p[k];
  31.                 p[k] = tmp;
  32.             }
  33.         }
  34.     }
  35. }

复杂度:T(N)=N*T(N-1)+c(N). T(N)=O(N!)

阅读(570) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~