全排列問題

時間 2022-03-23 05:04:17

1樓:匿名使用者

這個**有問題,修改一下

void perm(int list, int k, int m)

else}}

這樣才能求出非3位陣列的全排列

思路:假設n個數的全排列是perm(list, 1, n),即從第1個開始到第n個數的全排列,那麼它的解可以劃分為子問題:當第一位確定是某個數的時候,其餘數的全排列。

假設第一位確定是陣列中第i個數的時候,將陣列第1個數與第i個數交換位置,則需求perm(list', 2, n),即調整位置後的陣列第2個至第n個的全排列。

逐漸劃分子問題,到陣列最後乙個數時,它的全排列就是它本身,遞迴到底,這樣就可以將前方排列好的輸出了

程式swap(int *a, int *b)交換兩個數字不解釋,perm(int list, int k, int m)將陣列list從k位到m位進行全排列。首先確定首位是陣列中的哪個數字,將其換至第一位,然後遞迴求交換過的陣列剩下的數字的全排列,遞迴完成再把那兩個數換回來,再用另乙個數字當作首位,以此類推

2樓:匿名使用者

;using namespace std;

int n,count = 0;

int perm(int *list, int i, int n);

void swap(int *a,int *b) //沒有必要把temp定義為輸入引數void swap(int *a,int *b,int temp)

int main()

int perm(int *list, int i, int n)count++;

cout<

} else }

return count;}

matlab中全排列的問題 10

3樓:功誠蹉燕

perms

產生所有可能的排列語法p

=perms(v)p=

perms(v),這裡v是乙個長度為n的行向量,此函式產生v中這n個元素的全排列矩陣,每行為乙個排列。矩陣p包含有n!

4樓:真

clear;clc

n=4;

m=3;

x=nchoosek(1:n,m);

y=cell2mat(arrayfun(@(k)perms(x(k,:)),1:nchoosek(n,m),'uniformoutput',0)')

z=nchoosek(n,m)*prod(1:m)

c語言中全排列問題思路

5樓:匿名使用者

方法1:如果位數不多窮舉

方法2:位數多建議遞迴。

數字排列的問題!請教,C語言數字全排列的問題(急!!)求C程式碼和演算法

解肯定不唯一了,我隨便想乙個 每組20行,每行的0 9出現頻率相同 第一組000,111,222,333,444,999001,112,223,334,445,990002,113,224,335,446,991.019,120,231,342,453,908第二組 020,131,242,353,...

pascal全排列演算法,急急

簡單回溯 這個 是我剛編的,通過了 const max 9 var m,n longint a array 1.max of longint procedure work j,k longint j 為列舉第j個數字,k 為上次的列舉值 var i longint begin if j m 1 th...

排列組合問題,數學排列組合問題

首先是參加乙個展銷會,用公式10c3 10!3 10 3 1200種選法。仔細來說的話,先從10個人中選乙個,共有10種選法,再從剩餘的9個人中選乙個,有9種選法,再從8個中選乙個,有8種選法。根據乘法原理,共有10 9 8 7200種選法。但是3個人參加的是乙個展銷會,所以上述的選法會有重複。例如...

C語言排列問題

輸入乙個數輸出這個數所有的排列,遞迴做法。include int a 100 int n void output void swap int a,int b 注意取位址。void pailie int t for i t i n i int main return 0 這個程式你要等一會才能執行完畢...

Pascal習題 求N個數的全排列

var a array 1.100 of longint n longint b array 1.100 of boolean procedure f sum longint var j longint begin if sum n then begin for j 1 to n do write ...