求從第0層(只有乙個起點)到頂層(有多個點)的最短路
特殊樣例:
220 // 這個節點和根不連通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行,每行三個數,分別為兩個城市名和距離。輸出每組輸出佔兩行。第一行輸出起點到終點的最短距離。第二...