(递归5)全排列
題目:
算法競賽入門經典例7-2-1:輸入整數n,按字典序從小到大的順序輸出前n個數的 所有排列
A:已確定的前綴數列
S:需要進行全排列的元素集合
偽代碼:
void print_permutation(序列A, 集合S) { if(S為空) 輸出序列A; else 按照從小到大的順序依次考慮S的每個元素v { print_permutation(在A的末尾填加v后得到的新序列, S-{v}); } }分析一下偽代碼啊,第一次for循環(huán)從一開始,然后進行不斷的遞歸,遞歸時遇見出現過的元素,就跳過,因此不斷產生新的元素開頭的全排列,比如第一次:A:1,S:2—9;遞歸->A :1,2,S:3—9
總體上是一個解答樹:
從上到下一直到最底層,然后回溯,走到其他子層。
已經確定的前綴序列:用數組表示。
cur:當前需要確定的元素位置
S:不需要用數組保存,因為A中沒出現的元素都可選,所以可由A來確定s
標志變量ok:檢查元素是否用過
總結
- 上一篇: java 日期只计算年月日大小_Java
- 下一篇: jumpserver 使用教程_Jump