洛谷 P1359 租用游艇
题目传送门
2019.8.7Mr^Simon蒟蒻水题T2
解题思路:
最短路裸题
AC代码:
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 5 using namespace std; 6 7 int n,a[201][201],dist[201]; 8 bool p[201]; 9 10 void Dijkstra() { 11 memset(dist,0x3f,sizeof(dist)); 12 memset(p,false,sizeof(p)); 13 dist[1] = 0; 14 for(int i = 1;i <= n;i++) 15 dist[i] = a[1][i]; 16 for(int i = 2;i <= n; i++) { 17 int bh,_min = 0x7f7f7f7f; 18 for(int j = 1;j <= n; j++) { 19 if(!p[j] && _min > dist[j]) { 20 bh = j; 21 _min = dist[j]; 22 } 23 } 24 p[bh] = true; 25 for(int j = 1;j <= n; j++) 26 dist[j] = min(dist[j],dist[bh] + a[bh][j]); 27 } 28 } 29 30 int main() 31 { 32 memset(a,0x3f,sizeof(a)); 33 scanf("%d",&n); 34 for(int i = 1;i <= n; i++) a[i][i] = 0; 35 for(int i = 1;i <= n - 1; i++) 36 for(int j = i + 1;j <= n; j++) 37 scanf("%d",&a[i][j]); 38 Dijkstra(); 39 printf("%d",dist[n]); 40 return 0; 41 }