poj1062最貴的禮物 最短路徑

2021-06-05 22:29:06 字數 957 閱讀 7801

題目:輸入第一行是兩個整數m

--等級差距,n(1 <=n <= 100)物品的總數。接下來按照編號從小到大依次給出了n個物品的描述。每個物品的描述開頭是三個非負整數p

--**、l

--等級、x替代品總數(x< n)。接下來x行每行包括兩個整數t

---編號,v

---**。

分析:等級差距不能大於m,

n個物品都要有,或者用其替代物替代,替代物有兩個不是說必須用兩個替代,而是只要替代中的乙個就行;要求找出**最少的情況;及,如果替代物比原物合適,就用替代物替代,找到最小值;所以用

dijkstra

最小路徑演算法

---地傑卡斯特最短路徑;

最短路徑演算法的原理:dijkstra(迪傑斯特拉)演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。

用說的不太清楚,我搞過來一幅圖:

初始時,s中僅含有源。設u是g的某乙個頂點,把從源到u且中間只經過s中頂點的路稱為從源到u的特殊路徑,並用陣列dist記錄當前每個頂點所對應的最短特殊路徑長度。dijkstra演算法每次從v-s中取出具有最短特殊路長度的頂點u,將u新增到s中,同時對陣列dist作必要的修改。一旦s包含了所有v中頂點,dist就記錄了從源到所有其它頂點之間的最短路徑長度。

對照找到的這道題的**進行分析:

private static voiddijkstra()

for(int i = 1; i <= n; i++)

}if(k == 0)

break;

used[k]= 1;

for(int j = 1; j <= n; j++) }}

}其實還是有地方沒搞明白,但是作為圖論的第一道題,先這樣,有機會總結的時候回來再搞明白!

部分內容引自:

POJ 1062 最短路 dijskra 列舉

zwj 推薦的一道最短路神題 等級限制這個條件可以列舉所有符合條件的區間的點,從最高點到酋長的等級。然後就是求最短路了。算是 dijstra 的模板吧。include include include include include include include include include in...

昂貴的聘禮 poj 1062 最短路

沒看好題目條件 隨便寫了個弗洛伊德就交了 實際上兩個身份差距大的人是連間接交易都不允許的 所以列舉每個等級區間並對其用dijkstra演算法找最小值 ac include include include include include include include include include ...

poj 1062 有限制的最短路

思路 要求對於最短路上的點,不能出現等級之差大於m,於是我們可以列舉,假設酋長的等級為level,於是這個區間範圍 level m,level level m i,level i level,level m 都是可行的,對於列舉的每個區間範圍,做一次spfa即可,最終結果取最小值即可。1 inclu...