問題描述:
設某一機器由n個部件組成,每一種部件都可以從m個不同的**商處購得。設是從**商j處購得的部件i的重量,是相應的**。試設計乙個優先佇列式分支限界法,給出總**不超過d的最小重量機器設計。
[之所以想記錄這個問題,是因為我覺得自己"用各個部件的最小重量作為未來最理想重量"的這個設計還挺特別。其他都是實驗報告中的內容]
演算法描述:
演算法實現:
#include#includestruct
nodetype
;#define maxint 65534;
int doit(int n,int m,int d,int **w,int **c,int *future)
}int realmin=maxint; //
記錄最小重量
int *markmin;
markmin=(int *)malloc((sizeof(int))*n);
//記錄部件i的**商markmin[i]
struct nodetype *minr,*minp,*r,*q;
while(h!=null)
r=q;
q=q->next;
}for(int i=0;i)
else
}
}if(minp==h)//
拓展結點為頭結點
else
//拓展結點非頭結點
/*如果當前佇列中的結點的最理想重量大於已經求出的最優解,則將該結點釋放
*/while(h->preview>=realmin&&h!=t)
if(h->preview>=realmin)
}/*輸出最優值及最優解
*/printf(
"%d\n
",realmin);
for(int i=0;i"
%d ",markmin[i]+1
);
return0;
}int
main()
for(int i=0;i1;i++)
future[n-1]=0
;
//購買完部件i後剩餘部件的最理想重量
doit(n,m,d,w,c,future);
//優先佇列分支限界演算法
return0;
}
佇列式分支限界法 裝載問題
今晚終於把老師發布的演算法題的思路理清楚了,很是開心。這次的演算法是用佇列式分支限界法解決裝載問題。下面對於演算法的幾乎每一步都給了詳細解釋。需要的同學可以借鑑一下。嘻嘻。希望大家一起共同進步呀 佇列式分支限界法 貨櫃問題 public class fifobbloding 佇列類 private ...
0 1揹包問題 分支限界法 優先佇列分支限界法
演算法首先根據基於可行結點相應的子樹最大價值上界優先順序,從堆中選擇乙個節點 根節點 作為當前可擴充套件結點。檢查當前擴充套件結點的左兒子結點的可行性。如果左兒子結點是可行結點,則將它加入到子集樹和活結點優先佇列中。當前擴充套件結點的右兒子結點一定是可行結點,僅當右兒子結點滿足上界函式約束時,才將它...
分支限界法 0 1揹包問題 佇列式
一.分支限界法概述 1 分支限界法就是採用廣度優先的策略,依次搜尋活結點所有的分枝,也就額是所有的相鄰結點。在求最優解時採用乙個限界函式,計算限界函式值,選擇乙個最有利的子節點作為擴充套件結點,使搜尋樹朝著解空間樹上有最優解的分支推進,以便盡快找出乙個最優解。2 常見的兩種分支限界法 先進先出 fi...