
建议跟着我的代码自己打个表就懂了
#include<iostream>
using namespace std;
int n;
int t[205][205];//时间
int dp[205];//dp数组
int w[205][205];从i到j的时间
int main(){
cin >> n;
int i,j;
for(i = 1; i <= n-1; ++i){//赋值
for(j = i+1;j <= n; ++j){
cin >> t[i][j];
}
} for(i = 2; i <= n; ++i){//从2开始将dp数组赋值10000000,方便比较大小
dp[i] = 10000000;
}
for(i = 1; i <= n-1; ++i){
for(j = i+1;j <= n; ++j){
w[i][j] = dp[i] + t[i][j];//dp[i]是到i港口所用最短时间,加上从i港口到j港口的时间
dp[j] = min(dp[j],w[i][j]);//取最小值,到j港口的最小时间
}
}
cout << dp[n];//输出
return 0;
}
本文通过C++代码介绍了Dijkstra算法的基本思想,用于求解图中两点间的最短路径。代码中展示了如何初始化dp数组并更新最短路径,通过不断寻找当前最短路径节点并更新其相邻节点的最短路径来找到整个图的最短路径。算法适用于解决港口间最短航行时间问题。

356

被折叠的 条评论
为什么被折叠?



