歐幾里得旅行商問題uva1347

2021-09-30 14:39:59 字數 818 閱讀 4949

題意:自見紫書

題解:這道題啊,我發誓我是聽過的,但是我忘了,然後自己盯著這道題想了好久,也沒想出來

dp這東西,定義狀態是非常重要的啊,發現自己對這道題的狀態完全下不去手

有兩種分析思路:

第一種是,設f[i][j]表示前i個點已經訪問過,落後的人在j時經過的最小路程(這是已經把來回看做兩個人)

規定i>j,所以dp方程式就是

if(jif(j==i-1) f[i][j]=min(f[i-1][k]+dis(k,i))  0<=k第二種分析思路以後來補

code:

#include#include#include#include#include#includeconst int maxn=1005;

const int inf=0x3f3f3f3f;

using namespace std;

struct nodep[maxn];

double dp[maxn][maxn]; int n;

inline double dist(node a,node b)

int main()

{ while(scanf("%d",&n)!=eof)

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

scanf("%d%d",&p[i].x,&p[i].y);

dp[1][1]=0;

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

{dp[i][i-1]=inf;

dp[i][1]=dist(p[i],p[1]);

for(int j=1;j

uva1347(dp,雙調歐幾里得旅行商問題)

題意 給出n個點,確定一條連線各點的最短閉合旅程的問題。將其轉換成2個人同時從最左邊出發,然後分別經過不同路徑到達最右邊的距離 求解一般過程 1 首先將各點按照x座標從小到大排列,時間複雜度為o nlgn 2 尋找子結構 定義d i,j 為序號1 max i,j 已經全部被訪問過,並且當前位置在i和...

旅行商問題

旅行商問題 乙個商人從城市a出發,訪問bcde等城市各一次最後回到a,問行程如何使得路程或費用最低。這是個np 非多項式可解,但一般驗證容易 問題,假設中間有4個城市,那麼全排列為4!24種,沒有很好的演算法,基本只能窮舉了。class vertex 4 public class lianxi pu...

旅行商問題

一銷售商從n個城市中的某一城市出發,不重複地走完其餘n 1個城市並回到原出發點,在所有可能的路徑中求出路徑長度最短的一條。本題假定該旅行商從第1個城市出發。對每個測試例,第1行有兩個整數 n 4 n 10 和m 4 m 20 n是結點數,m是邊數。接下來m行,描述邊的關係,每行3個整數 i,j le...