演算法筆記 雙調歐幾里得旅行商問題

2021-06-28 22:00:51 字數 678 閱讀 1358

reference:

1)《演算法導論》15-3

2)將所有點按x座標從小到大排序後(假設不存在重複)。從左至右標記為0, 1, 2…n-1

那麼這問題的關鍵乙個性質是,對於一點i(i > 0)和任意包含它的雙調路徑,i-1一定是i的前繼或者後繼。

如果我們假設乙個環遊的順序,比如逆時針 f[

i][j

] (i>j)表示從i到0,再從0到j

1)如果i-1是在(i, 0)上,f[

i−1]

[j] 已經求出來了,再加上(i, i-1)就行了 那麼f

[i][

j]=f

[i−1

][j]

+dis

t[i−

1][i

] 2)如果i-1在(0, j)上,則j=i-1,否則不滿足性質。 所以f

[i][

i−1]

=min

(f[i

−1][

k]+d

ist[

k][i

]),0

<=

k1 (求最短的情況)

這意味著i向左走遇到的第乙個點是k,然後走(k, 0),(0, i-1),這段路徑就是f[

i−1]

[k]

例題:

poj 2677

雙調歐幾里得旅行商問題 《演算法導論》

題目描述 給定平面上n個點作為輸入,要求從最左端的點開始,嚴格向右前進,直到最右端的點,再嚴格向左前進到第乙個點,每乙個點只能經過一次。主演算法 d i,j 表示兩個人第乙個點出發沿著不同的路徑分別走到i,j 並且經過1 max i,j 的所有點到達終點還需要的距離。di st i j 表示i,j ...

演算法導論 15 1 雙調歐幾里得旅行商問題

先做以下定義 對所有點按x座標排序,從0開始依次為每個點編號,令 1 兩條路徑分別為a和b,且起點都是點0,方向嚴格向右 2 a i 表示路徑a的一種狀態,起點為點0,終點為點i,方向嚴格向右,0 i 3 b j 表示路徑b的一種狀態,起點為點0,終點為點i,方向嚴格向右,0 j 4 d i j 為...

雙調旅行商問題

poj2677,先對x排序,但這題已經排好序的了 dp i j 表示從點i開始往左直到最左邊的點,然後再從左往右到j點且經過所有i左邊的點所走的距離 include include include include using namespace std define ll long long def...