和上篇一樣,考前寫寫偽代碼,考完了補上具體的解釋和代碼。
狀態{矩陣,結果集,下界}
全局結果集列表,全局上界初始為Infinite
建立一個heap,存儲狀態,出堆規則為擁有最小的下界。
利用reduced cost matrix 來把矩陣進行化簡,把化簡消耗作為下界,將初始狀態加入heap
當heap不為空時
{
從heap中彈出一個狀態,賦值給兩個臨時狀態。
若該狀態的下界大於等於全局上界,則return
遍歷所有弧,選擇刪除則引起下界上升最大的弧
若使用該弧
{
更新下界
若已經遍歷所有城市並回到了起點且小於等於全局上界,記錄該狀態,更新全局上界
否則 將該弧所對應的整行和整列賦值為Infinite,將當前的弧的反向弧賦值為Infinite,在結果集中記錄該弧,將狀態加入heap
}
否則 在matrix中將該弧賦值為Infinite,更新下界,將狀態加入heap
}