/ *
재귀 함수 아이디어 :
예 : 입력 123.
출력 1-2-3.
1-3-2.
2-1-3.
2-3-1.
3-1-2.
3-2-1.
법칙 : 수 (n)의 조건 하에서, 각각의 숫자는 제 (N-1) 시간이 될 것이다. 라인에 for 루프 여기.
그리고 자신의 풀백 배열의 수. 이 재귀 만듭니다.
* /
#INCLUDE <STDIO.H>
#INCLUDE <stdlib.h>
INPUT의 INT (INT [])
// 입력 어레이 반환 배열 요소의 수.
입력 INT합니다 (nums의 INT [])
{
INT I;
숯 C = '0';
for (i = 0; c != '\n'; i++)
{
scanf_s("%d", &nums[i]);
c = getchar();
}
return i;
}
QuanPaiLie 공극 (INT [], INT, INT);
// 재귀 마지막 N-1 위치 전체 어레이 전에. 등등.
// P, 마지막 번호입니다. 숫자 Q 후, "지도자."
QuanPaiLie 공극합니다 (nums의 INT [], INT P, Q의 INT)
{
INT I, TEMP;
//递归的结束条件。最后只有一个数,它的全排列就是他自己。
if (p == q)
{
for (i = 0; i <= q; i++)
{
printf("%d-", nums[i]);
}
printf("\n");
}
else
{
//每个数都当一次该全排列的“龙头”。
for (i = p; i <= q; i++)
{
//将那个数交换该排列的到“龙头”。
temp = nums[i];
nums[i] = nums[p];
nums[p] = temp;
//将“龙头”的后面再进行全排列
QuanPaiLie(nums, p + 1, q);
//用完要换回来。
temp = nums[i];
nums[i] = nums[p];
nums[p] = temp;
}
}
}
INT의 main ()
{
INT의 nums [999], NUM;
num = input(nums);
QuanPaiLie(nums,0,num-1);
system("pause");
return 0;
}