題目:
給定乙個m×n的矩陣,定義一條路徑為:從矩陣左上頂點數字出發到達右下數字,每一次只可以從乙個數字出發向右移動一步或向下移動一步,定義路徑和為:路徑經過的數字的和。要求編寫乙個程式,找到路徑和最小的那條路徑,並給出最小路徑和。
給定如圖所示矩陣:一條路徑為2->0->3->6->9->5,路徑和為25
[2 ,0 ,11,1 ]
[4 ,3 ,6 ,12]
[7 ,10,9 ,5 ]
要求:測試時輸入乙個矩陣(輸入方式隨意),然後程式輸出該矩陣的最小路徑和與路徑。
思路:動態規劃求解。dp[i][j]表示從點d[0][0]到點d[i][j]的最短路徑和。
對於點d[i][j]它只能從點d[i-1][j]或者點d[i][j-1]而來,所以有遞推公式dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + d[i][j]; 特殊的,對於第一行的點d[0][j]只可能由點d[0][j-1]而來;對於第一列的點d[i][0]只可能由點d[i-1][0]而來。
**解答:
#include
using namespace std;
const int maxn = 1001; //行列最大值
int m,n,k=0; //m行n列,路徑有k個結點
int d[maxn][maxn]; //儲存原始矩陣值
int dp[maxn][maxn]; //從d[0][0]到d[i][j]路徑最小值
int mp[maxn]; //儲存路徑中的結點值
int main() else if(i==0) else if(j==0) else else
}
}
for(int i=k-1;i>=0;i--)
cout << endl << dp[m-1][n-1]
}
//測試
結果如下圖:
最短路 求最長最短路,求最短路的路徑
hdu 1595 find the longest of the shortest include include include include include include include include include include include include include defi...
矩陣最短路徑
題目描述 求從左上角到右下角的權重和最小的路徑,可以向上 下 左 右四個方向行走 思路 動態規劃 先根據上 下 左 右四個位置計算走到該單元格的最短距離 然後根據得到的單元和最短距離更新上 下 左 右四個位置的最短距離 m,n 5,3 arr 1,1,1 5,1,1 1,1,1 1,5,7 1,1,...
求最短路徑
從源點到終點的路徑可能存在三種情況 1.沒有路徑 2.只有一條路徑 3.有多條路徑 思路 按照路徑長度遞增的次序從源點到終點的路徑。假設gra ph graph graph 為有向網的鄰接矩陣,s ss為已找到最短路徑結點的集合,其初始狀態為只含乙個頂點,即源點。另設乙個一維陣列dis t n di...