- #include <stdio.h>
- #define MAX 4
- void perm(int *, int, int);
- void main()
- {
- int array[MAX] = {1,2,2,3};
- perm(array,0,MAX-1);
- }
- void perm(int *p, int k, int m)
- {
- int i;
- int tmp;
- if(k == m) {
- for(i = 0; i <= m; i++)
- printf("%d ", p[i]);
- printf("\n");
- }
- else {
- for(i = k; i <= m; i++) {
- int j,mark = 0;
- for(j = k; j < i; j++) {
- if(p[j] == p[i]) {mark = 1;break;}
- }
- if(!mark) {
- tmp = p[i];
- p[i] = p[k];
- p[k] = tmp;
- perm(p,k+1,m);
- tmp = p[i];
- p[i] = p[k];
- p[k] = tmp;
- }
- }
- }
- }
复杂度:T(N)=N*T(N-1)+c(N). T(N)=O(N!)
阅读(570) | 评论(0) | 转发(0) |