ural Kind Spirits 最短路徑 dp

2022-08-02 05:12:14 字數 1215 閱讀 3654

求從第0層(只有乙個起點)到頂層(有多個點)的最短路

特殊樣例:

2

20 // 這個節點和根不連通12

0*21

1023

0answer

5

這道題可以先建圖再求最短路,也可以用dp

dp :

dp[i][j]表示到達第i層第j個節點的最短距離,第i層只能從i-1層爬上來,狀態轉移方程:

dp[i][j] = min(dp[i-1][j所連線的節點]+cost)

最後輸出dp[頂層]中最小的值即可

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

} s.push_back(v);

char

ch;

if(i!=n) cin>>ch;

}

另外由於第i-1層更新完第i層後就沒用了,所以每次維護一層的最短路即可。

s[0]=1;s[1]=0

;

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

}if(i!=n) scanf("

%c",&ch);

for(int j=0;j<=temp[0];j++)s[j]=temp[j];

}//find min(s[1],...,s[ s[0] ]);

ans = s[1

];

for(int i=2;i<=s[0];i++)

printf(

"%d\n

", ans);

另外建圖的**:

cin >>depth;

//init

for(int i=0;ii)

for(int j=0;jj)

m[i][j]=inf;

//read and construct matrix graph

int id1=0,id2=1; //

id1 is high,id2 is lower

intnum,index,value,upid,lowid;

for(int i=0;ii)

}id1=id2; id2+=num;

n =id2;

//printm();

char ch ; if(i1) cin >>ch;

}

完整** : 

codeup 問題 D 最短路徑

題目描述 有n個城市m條道路 n 1000,m 10000 每條道路有個長度,請找到從起點s到終點t的最短距離和經過的城市名。輸入輸入包含多組測試資料。每組第一行輸入四個數,分別為n,m,s,t。接下來m行,每行三個數,分別為兩個城市名和距離。輸出每組輸出佔兩行。第一行輸出起點到終點的最短距離。第二...

Codeup最短路徑 最短路徑

n個城市,標號從0到n 1,m條道路,第k條道路 k從0開始 的長度為2 k,求編號為0的城市到其他城市的最短距離。第一行兩個正整數n 2 n 100 m m 500 表示有n個城市,m條道路,接下來m行兩個整數,表示相連的兩個城市的編號。n 1行,表示0號城市到其他城市的最短路,如果無法到達,輸出...

演算法筆記 問題 D 最短路徑

題目描述 有n個城市m條道路 n 1000,m 10000 每條道路有個長度,請找到從起點s到終點t的最短距離和經過的城市名。輸入輸入包含多組測試資料。每組第一行輸入四個數,分別為n,m,s,t。接下來m行,每行三個數,分別為兩個城市名和距離。輸出每組輸出佔兩行。第一行輸出起點到終點的最短距離。第二...