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