如果元素不重復(fù)使用dfs,可重復(fù)使用dp(不過(guò)重不重復(fù)這兩個(gè)都可以解決,只是好理解)
- 解
比如beautiful arrangement 4個(gè)元素
坑是pos 遍歷1-4 把坑+1 坑從1開(kāi)始增加 當(dāng)坑(pos)>5 return;
先填pos = 1 ,used記錄是否訪(fǎng)問(wèn)
1234之后,回溯
然后填pos = 2
然后3和4
NQUEEN問(wèn)題也是不過(guò)是一行一行的填坑 - 代碼固定
visited記錄1
helper()
visited記錄0 - 理解
pos是坑
開(kāi)始給1填 填好1234
回溯
填坑 - 上一次和當(dāng)前
helper(N, pos + 1, used);
為什么選的坑是pos。
分析
- pos = 3 結(jié)束?(pos = 3時(shí) 有 i = 3和4)
i = 3 時(shí),pos = 3(回溯直接是回復(fù)狀態(tài) 是回溯到i = 3的時(shí)候)
i = 4 , pos =3
pos = 2 結(jié)束?(i = 3和4)
i = 2 pos = 2 (回溯直接是回復(fù)狀態(tài))
i = 3 pos = 2
i = 4 pos = 2 - 如果不能符合,則每次if都過(guò)不去,然后i值一直迭代 直到回溯上個(gè)規(guī)模
- i = 1 時(shí),會(huì)執(zhí)行
used[1] = 1
help()
used[1] = 0 //重置狀態(tài)
但是i = 2 的時(shí)候?yàn)槭裁床荒馨?填到pos = 1 中?
因?yàn)檫@時(shí)候的規(guī)模還在 i = 1 used[1] 被占了,
只有在i = 1 這輪循環(huán)結(jié)束之后才能把2放入pos = 1 中
也因?yàn)檫@樣解才有這樣的規(guī)律(先填pos = 1 的所有解遍歷之后,遍歷2 然后3 ) - pos = 3 上次是pos = 2
pos = 3 結(jié)束 ,回溯到pos = 2