#include<bits/stdc++.h>
using namespace std;
int data[1001][1001];// 存储原始数据
int step[1001][1001];// 记录步数数据
const int maxV = 99999999;
int n;// n行数据
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
step[i][j] = maxV;// 给一个非常大的默认值
}
}
// 边接收原始数据边往记录步数数据中填写数据
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cin>>data[i][j];
if(i==1){// 当输入第一个数时候
step[i][j] = data[i][j];// 保存步数到对应的位置
// 保存到下一行所受的影响的2个位置
step[i+1][j] = step[i][j];
step[i+1][j+1] = step[i][j];
}else{
// 记录上一步到达该位置最短路径+此步的值
step[i][j] = step[i][j]+data[i][j];
// 对下一行所受的两个位置元素进行比较大小
step[i+1][j] = min(step[i+1][j],step[i][j]);
step[i+1][j+1] = min(step[i][j],step[i+1][j+1]);
}
}
}
int minRes;// 保存最后一行的最小数
for(int j=1;j<=n;j++){
if(j==1 || step[n][j]<minRes){
minRes = step[n][j];
}
}
cout<<minRes;
return 0;
}
求最短路径值DP
最新推荐文章于 2024-09-04 21:39:45 发布
本文介绍了如何使用C++编程语言实现Dijkstra算法,用于计算给定二维数组表示的图中从第一行到其他行的最短路径,最后输出最后一行的最小值。
摘要由CSDN通过智能技术生成