전체 어레이 알고리즘 (C 언어)

/ *
재귀 함수 아이디어 :
예 : 입력 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;

}

发布了1 篇原创文章 · 获赞 0 · 访问量 24

추천

출처blog.csdn.net/qq_45914759/article/details/104045633