翻煎餅 迭代加深搜尋 剪枝

2021-09-25 11:40:50 字數 873 閱讀 9819

這裡有道類似的 題目

使用迭代搜尋, 最多只能跑過 n=7

n=7n=

7 的資料, 需要剪枝,

每次旋轉相鄰數字之間的差值變化最微小, 翻轉一次僅有一對數字間的差的絕對值會發生改變, 於是統計有cnt

cntcn

t數字間絕對值不為 1

11, 則至少需要 cnt

cntcn

t 次操作到終態, 依此進行剪枝 .

沒什麼好說的 …

#include

#define reg register

const

int maxn =25;

int n;

int a[maxn]

;int tmp[maxn]

;bool flag;

bool

chk(

)int

chk_2()

void

dfs(

int k,

int lim)

if(k == lim+1)

return;if

(k-1

+chk_2()

> lim)

return

;for

(reg int i =

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

intmain()

}return0;

}

迭代加深搜尋

深度優先搜尋每次選定乙個分支,然後往下搜尋,直到遞迴邊界 才回溯。這種策略有一點缺陷,那就是當搜尋樹的分支數目特別 多,並且答案在某個較淺的節點上,如果dfs在一開始就選錯了分 支,那就會在沒有答案的深層次浪費時間 當搜尋樹規模隨著層次的深入增長很快,並且能 夠確保答案在乙個較淺的節點上時,就可以使...

迭代加深搜搜尋

對於可以用回溯法求解但解答樹的深度沒有明顯上限的題目,可以考慮使用迭代加深搜尋。經典問題 埃及分數問題 給出乙個分數,比如19 45,把它寫成若干個形如1 ri的分數的和的形式,比如19 45 1 5 1 6 1 18,要求分母不能重複使用並且使用的分數的個數最少。如果有多組個數相同的解,最後的分數...

IDDFS迭代加深搜尋

includeusing namespace std const int maxn 10 int n,a maxn bool ans sort return true int h bool dfs int d,int maxd return false int solve return max an...