全排列的實現(C)

2021-09-01 12:15:14 字數 811 閱讀 6392

找工作,筆試經常會出現乙個題,怎樣生成乙個集合內所有元素的全排列。剛開始的時候沒有覺得這是乙個難的問題。其實,當寫在試卷上,真的不太會,作答的過程感覺心裡沒有什麼底。

回來後,查了一些資料,看了一些書,對這個問題有一定的認識,舉乙個例去清晰一下題目的意思,例子為:字符集的全排列: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...