日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言backtrack算法6,一个关于数组回溯算法(backtrack)的通用模式

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言backtrack算法6,一个关于数组回溯算法(backtrack)的通用模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天在LeetCode看到一篇非常有價值的討論,列舉了一系列列數組的回溯算法的通用模式,自己動手一個個完成后,感覺對理解回溯算法的原理有很大幫助。

其實回溯就是按順序的一種窮舉,但是它會設定停止條件和達成條件

一旦符合停止條件,直接整體跳過,包括它后面的子集全部跳過

一旦符合達成條件,便是所需要的數據,添加到結果集合里

一個簡單的例子:

列舉數組arr的所有的長度相同的組合,字符不重復

例如:[1,2,3]

輸出:

[

[1,2,3],

[1,3,2],

[2,1,3],

[2,3,1],

[3,1,2],

[3,2,1]

]

代碼(js):

function subSet(nums){

let result=[],temp=[]

backtrack(result,temp,nums)

return result

function backtrack(result,temp,nums){

// 達成條件

if(temp.length===nums.length)result.push(temp.slice())

for(let i=0;i

// 停止條件

if(temp.includes(nums[i]))continue

temp.push(nums[i])

backtrack(result,temp,nums)

temp.pop()

}

}

}

它的運行軌跡:

1

1 1 ×

1 2

1 2 1 ×

1 2 2 ×

1 2 3 √

1 3

1 3 1 ×

1 3 2 √

1 3 3 ×

2

2 1

2 1 1 ×

2 1 2 ×

2 1 3 √

2 2 ×

2 3

2 3 1 √

2 3 2 ×

2 3 3 ×

3

3 1

3 1 1 ×

3 1 2 √

3 1 3 ×

3 2

3 2 1 √

3 2 2 ×

3 2 3 ×

3 3 ×

一旦父級達到停止條件,例如2 2,像后面的子集2 2 1,2 2 2都不會進行

當通過的停止條件并且符合達成條件的,就是結果。

總結

以上是生活随笔為你收集整理的c语言backtrack算法6,一个关于数组回溯算法(backtrack)的通用模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。