使用全排列输出abcd
#include<stdio.h>
/*交换函数*/
void Swap(char *a, char *b)
{
char temp;
temp = *a;
*a = *b;
*b = temp;
}
/*list代表要进行全排列的数组,k~m代表这个数组中要进行全排列数字的范围*/
void Perm(char* list, int k, int m)
{
if (k == m) //只剩下一个元素,即n==1对应的递归出口
{
for (int i = 0; i <= m; ++i) //打印全排列
{
printf("%c ", list[i]);
}
printf("\n");
return;
}
else
{
for (int i = k; i <= m; i++)
{
Swap(&list[k], &list[i]); //将第i个元素与该问题中第一个元素交换
Perm(list, k + 1, m);
Swap(&list[k], &list[i]);
}
}
}
int main()
{
char list[] = {
'a','b','c','d' };
int n = sizeof(list) / sizeof(char);
Perm(list, 0, n - 1);
return 0;
}