遞歸 —— 全排列(帶輸出具體情況)


遞歸方法求全排列


#include<stdio.h>
#include<algorithm>

using namespace std;

//每次兩兩交換,到最後一個位置時輸出 
void perm(int a[],int begin,int end)
{
	if(begin == end)	//
	{
		for(int i=1;i<=end;i++)
			printf("%d ",a[i]);
		printf("\n");
	}else{
		//begin前面的固定下來,求begin後面的序列的全排列,遞歸到後面的序列只剩一個元素爲止
		for(int i=begin;i<=end;i++)
		{
			swap(a[i],a[begin]);
			perm(a,begin+1,end);
			swap(a[i],a[begin]);
		}		
	}
}

int main()
{
	int n,a[6];
	printf("輸入小於6的數:\n");
	scanf("%d",&n);	
	if(n<6){
		for(int i=1;i<=n;i++) a[i] = i;
		perm(a,1,n);	
	}
	return 0;
} 





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章