給出一個(gè)字符串“ABCDEF”,輸出它的全排列,這是一個(gè)基礎(chǔ)的數(shù)學(xué)問(wèn)題,目前已知的比較好的算法是基于交換的。 inline void swap(char &a,char &b)
{ char t=a; a=b; b=t;}
void Perm(string arr,int n,int k=0)//一共n個(gè)元素,現(xiàn)在排到第k個(gè)了
{
if(k==n)/*所有元素都已經(jīng)排完,輸出結(jié)果*/
{
for(int i=0; i<n; i)
cout<<arr[i];
cout<<endl;
}
else
{
for(int i=k; i<n; i)/*從自己開(kāi)始,自己與自己以及后面的元素進(jìn)行交換*/
{
swap(arr[k],arr[i]);
Perm(arr,n,k 1);
swap(arr[k],arr[i]);
}
}
} 算法的時(shí)間復(fù)雜度是O(n!) |
|
來(lái)自: 飛白_留白 > 《程序設(shè)計(jì)》