全排列 全組合問題的兩種解決方法

2021-08-20 20:57:24 字數 938 閱讀 8935

mark兩種計算 全排序問題(全組合問題)的組合和非組合解決方法

1.有排序的全排列(全組合)問題

這個用遞迴的方式解決

a.取陣列n中的最大值

b.再在剩下的n-1個中取m-1個

c.直到取到從n-m+1個數中取出1個為止

d.再取出陣列中次大的,重複a步驟,直到取到的數的編號==m

下面貼出c的實現

#include

#define max 5

int flag_n = 0;

int a[max] = ;

int flag = 0;

void solve(int n, int m, int a);

void display(int a);

void main()

void solve(int n, int m, int a)else}}

void display(int a)printf("\n");

2.無排序的全排列問題

該問題筆者打算用01演算法實現

解題思路:

注(從m個數中取n個)

a.將輔助陣列初始化為全0

b.輔助陣列最後的第n位數置為1

c.用二進位制計算方法,每次陣列最後加一

d.統計該陣列中為1的數的個數是否為n

e.如果是的話輸出/記錄該排序

演算法c實現:

#include

#define max 5

int ifgoon = 1;

int a[max] = ;

int help[max] = ;

void display()else

}printf("\n");

}void helpaddone()else}}

}int main()

}while(1 == ifgoon)

}謝謝欣賞

開關燈問題兩種解決方法

有編號1 100個燈泡,起初所有的燈都是滅的。有100個同學來按燈泡開關,如果燈是亮的,那麼按過開關之後,燈會滅掉。如果燈是滅的,按過開關之後燈會亮。現在開始按開關。第1個同學,把所有的燈泡開關都按一次 按開關燈的編號 1,2,3,100 第2個同學,隔乙個燈按一次 按開關燈的編號 2,4,6,10...

八皇后問題的兩種解決方法

最近看到遞迴,原本利用回溯思想解決的經典八皇后問題,其實也是可以用遞迴解決的 八皇后的遞迴解決思路 從第一行開始,依次判斷0 8列的哪一列可以放置queen,這樣就確定了該行的queen的位置,然後行數遞增,繼而遞迴實現下一行的判斷,依次類推直到行數增加到8 行數從0開始的 此時為遞迴 歸的條件,即...

全排列的兩種寫法

對於陣列 1,2,3 他們按照從小到大的全排列是 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 現在給你乙個正整數n,n小於8,輸出陣列 1,2,n 的從小到大的全排列。由出口遞迴回溯時,至少返回2層,第一次因為if語句,第二次因為不滿足for迴圈條件 include in...