c实现全排列(递归 回溯)

1 #include <stdio.h>
2
3
4 int m = 0;
5 void swap(int *a,int *b)
6 {
7 int m = *a;
8 *a = *b;
9 *b = m;
10 }
11
12 void perm(int a[],int k,int n)
13 {
14 int i;
15 if(k > n)
16 {
17 for(i = 0;i <= n;i++)
18 printf("%d",a[i]);
19 printf("\n");
20 m++;
21 }else
22 {
23 for(i = k;i <= n;i++)
24 {
25 swap(&a[k],&a[i]);
26 perm(a,k+1,n);
27 swap(&a[k],&a[i]);
28 }
29 }
30 }
31
32 int main(void)
33 {
34 int a[100];
35 int n,i;
36 scanf("%d",&n);
37 for(i = 0;i < n;i++)
38 {
39 a[i] = i + 1;
40 }
41 perm(a,0,n-1);
42 printf("T:%d\n",m);
43 return 0;
44 }
posted @ 2011-05-17 21:48  elwin  阅读(240)  评论(0)    收藏  举报