定义一个数组,编程打印它的全排列。
比如定义:#define N 3
int a[N]={1,2,3};
运行结果为:
123
132
213
231
312
321
主要思路:
1,把第一个数换到最前面来,准备打印1xx,在对后两个做全排列
2.把第二个换到最前面,准备打印2xx,再对后两个数13做全排列;
3.把第三个数换到最前面,准备打印3xx,在对后两个数1和2做全排列。
对递归还不熟练,这个编程,没想出切实可行的代码,求代码
比如定义:#define N 3
int a[N]={1,2,3};
运行结果为:
123
132
213
231
312
321
主要思路:
1,把第一个数换到最前面来,准备打印1xx,在对后两个做全排列
2.把第二个换到最前面,准备打印2xx,再对后两个数13做全排列;
3.把第三个数换到最前面,准备打印3xx,在对后两个数1和2做全排列。
对递归还不熟练,这个编程,没想出切实可行的代码,求代码
谢谢!
#include <stdio.h>
int n = 0;
void swap(int *a, int *b)
{
int m;
m = *a;
*a = *b;
*b = m;
}
void perm(int list[], int k, int m)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
printf("%d ", list[i]);
printf("\n");
n++;
}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m);
swap(&list[k], &list[i]); //用来恢复原来顺序
}
}
}
int main()
{
int list[] = {1, 2, 3};
perm(list, 0, 2);
printf("total:%d\n", n);
return 0;
}