《演算法筆記》4 3遞迴

2021-10-04 16:36:39 字數 1986 閱讀 2043

一.分治

分治是一種思想,可以用遞迴的方法實現,也可以用非遞迴的方法實現;

二.遞迴

自底向上:

三.題目

1.全排列:

方法一:

#include

using

namespace std ;

int n , p[11]

;void

generatep

(int index)

else}if

(t ==0)

}}}int

main()

方法二:

將一重迴圈換成雜湊表;

#include

const

int maxn =11;

int n , p[maxn]

, hashtable[maxn]=;

void

generatep

(int index)

for(

int i =

1; i <= n ; i ++)}

}int

main()

注意:

已經有全域性變數n,則不能在mian裡定義乙個int n;

2.八妃問題

方法一:

全排列,剔除不滿足條件的;如何檢查是否有在同一對角線的皇后:行數差 = 列數差(行數:陣列下標,列數:陣列值);

#include

#include

using

namespace std ;

const

int maxn =

100;

int cnt , n , p[maxn]

;bool hashtable[maxn]=;

void

generatep

(int index)}if

(flag ==

1) cnt ++;}

for(

int i =

0; i < n ; i ++)}

}int

main()

方法二:回溯法

思路:選出 index 可以放置的位置;

注意:1).遍歷上層選 index 的位置時,要利用 flag 排除不可能的位置(而不是選滿足條件的位置);

2).遞迴式後不用恢復初始化p[maxn];

**:

#include

#include

#include

using

namespace std ;

const

int maxn =

100;

int cnt , n ;

int p[maxn]

;void

generatep

(int index)}if

(flag ==1)

generatep

(index +1)

;}}}

intmain()

3.《演算法競賽入門經典》7-4

**:

#include

#include

using

namespace std ;

const

int maxn =20;

int n , p[maxn]

;int hashtable[maxn]=;

intprime

(int a)

return flag ;

}void

print_ring

(int index)

else}}

}int

main()

演算法筆記 4 3 遞迴

三.回溯 2.字母全排列 3.數樓梯 總時間限制 1000ms 記憶體限制 65536kb 描述逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的表示式2 3的逆波蘭表示法為 2 3。逆波蘭表示式的優點是運算子之間不必有優先順序關係,也不必用括號改變運算次序,例如 2 3 4的逆波蘭表示法為 2...

演算法筆記4 3遞迴 問題 A 吃糖果

問題 a 吃糖果 題目描述 名名的媽媽從外地出差回來,帶了一盒好吃又精美的巧克力給名名 盒內共有 n 塊巧克力,20 n 0 媽媽告訴名名每天可以吃一塊或者兩塊巧克力。假設名名每天都吃巧克力,問名名共有多少種不同的吃完巧克力的方案。例如 如果n 1,則名名第1天就吃掉它,共有1種方案 如果n 2,則...

演算法筆記4 3遞迴 神奇的口袋

有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,john...