矩陣求最短路徑

2021-08-22 07:14:16 字數 1234 閱讀 8243

題目:

給定乙個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...