找工作,筆試經常會出現乙個題,怎樣生成乙個集合內所有元素的全排列。剛開始的時候沒有覺得這是乙個難的問題。其實,當寫在試卷上,真的不太會,作答的過程感覺心裡沒有什麼底。
回來後,查了一些資料,看了一些書,對這個問題有一定的認識,舉乙個例去清晰一下題目的意思,例子為:字符集的全排列:123,132,312,321,231,213。
進一步認識全排列生成:
進一步方法考察:
經過學習與查詢,找到如下的演算法描述:
覺得這個演算法提供乙個實現能列舉全部合條件的資料,用c語言進行乙個實現:
#include#define n 4看看程式執行結果:typedef struct nodenode;
node a[n] ;
void init()
}void change_flag(int n)
}}void exchange(int x,int y)
int main()
printf("\n") ;
max_ind = 0 ;
max = -1 ;
for(i = 0 ; i< n ; i++)//左邊的數比較小}}
if(max == -1)
change_flag(a[max_ind].value) ;
if(a[max_ind].flag)
else
exchange(max_ind,j) ;
}printf("sum = %d",count) ;
return 0 ;
}
雖然實現了,可是**一點都不簡潔,請各位多多指教。
C 實現全排列
總時間限制 1000ms 記憶體限制 65536kb 描述給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。我們假設對於小寫字母有 a b y z 而且給定的字串中的字母已經按照從小到大的順序排列。輸入輸入只有一行,是乙個由不同的小寫字母組成的字串,已知字串的長度在1到6之間。輸出輸出這...
C 實現全排列
給定乙個陣列,求這個陣列的全排列。列如 a 對陣列a求全排列 結題思路 將a陣列中的元素依次放在第乙個位置然,對剩下的元素進行全排列。剩下元素全排列依然是,將剩下的元素依次放在第乙個位置,對剩下的元素進行全排列。直到剩下的元素個數為乙個時,排列結束。這裡我給出固定元素1,對元素2 3 4進行全排列的...
C 實現序列的全排列
c stl中提供了std next permutation與std prev permutation可以獲取數字或者是字元的全排列,每次函式呼叫獲取下一次排列結果。嘗試自己也實現了一下,功能跟庫函式不同。include using namespace std void output char buf...