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...