全排列---分治法

採用分治算法,不斷遞歸,例如給定數組arr={1,2,3},紅色爲打印,黑色爲遞歸回退,大體如下圖: 

代碼如下:

void Perm(int arr[],int k,int m)
{
	if(k==m)//數組中只有一個元素
	{
		for(int i=0;i<=m;++i)
		{
			cout<<arr[i]<<" ";
		}
		cout<<endl;
	}
	else
	{
		for(int j=k;j<=m;++j) 
		{
			swap(arr[j],arr[k]);
			Perm(arr,k+1,m);
			swap(arr[j],arr[k]);
		}
	}
}
 
int main()
{
	int arr[]={1,2,3};
	int n=sizeof(arr)/sizeof(arr[0]);
	Perm(arr,0,n-1);
	return 0;
}

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