中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

怎么使用c語言動態規劃求解最短路徑

小億
120
2023-08-18 16:23:43
欄目: 編程語言

在C語言中使用動態規劃求解最短路徑,可以按照以下步驟進行:

  1. 定義一個二維數組來表示圖中各個節點之間的距離。假設有n個節點,則可以定義一個n×n的二維數組dist[][],其中dist[i][j]表示節點i到節點j的距離。

  2. 初始化dist數組。對于直接相連的節點,賦予其對應的距離值;對于沒有直接連接的節點,可以將距離設為一個較大的值,表示不可達。

  3. 定義一個一維數組dp[]來保存最短路徑的值。其中dp[i]表示從起點到節點i的最短路徑長度。

  4. 初始化dp數組。將起點的最短路徑長度設為0,其他節點的最短路徑長度設為一個較大的值。

  5. 使用動態規劃的思想求解最短路徑。遍歷節點i,對于每個節點i,遍歷所有與其相連的節點j,更新dp[j]的值為dp[i] + dist[i][j],即通過節點i到達節點j的路徑長度。如果dp[j]的值被更新,則說明找到了一個新的最短路徑。

  6. 最終,dp數組中存儲的就是從起點到各個節點的最短路徑長度。

下面是一個使用動態規劃求解最短路徑的示例代碼:

#include <stdio.h>
#define INF 99999
void shortestPath(int graph[][4], int n, int src) {
int dist[n];
// 初始化距離數組
for (int i = 0; i < n; i++) {
dist[i] = INF;
}
dist[src] = 0; // 起點到自身的距離為0
// 動態規劃求解最短路徑
for (int k = 0; k < n - 1; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (dist[i] + graph[i][j] < dist[j]) {
dist[j] = dist[i] + graph[i][j];
}
}
}
}
// 輸出最短路徑
printf("最短路徑長度:\n");
for (int i = 0; i < n; i++) {
printf("%d -> %d: %d\n", src, i, dist[i]);
}
}
int main() {
int graph[4][4] = { {0, 2, INF, 1},
{INF, 0, 4, INF},
{INF, INF, 0, 6},
{INF, INF, INF, 0} };
shortestPath(graph, 4, 0);
return 0;
}

在上述示例代碼中,我們使用一個4×4的二維數組graph[][]來表示圖中各個節點之間的距離。INF表示不可達的情況。

執行該代碼,將輸出從起點0到其他節點的最短路徑長度。

0
思茅市| 石嘴山市| 遂宁市| 潍坊市| 广西| 淮安市| 乐山市| 综艺| 盘锦市| 虞城县| 乡城县| 革吉县| 洛浦县| 武宣县| 贵州省| 文昌市| 丹江口市| 文山县| 綦江县| 内黄县| 邓州市| 敖汉旗| 娱乐| 册亨县| 常州市| 凉山| 大方县| 临泉县| 延安市| 长垣县| 拜城县| 象山县| 蒙山县| 横山县| 左权县| 渑池县| 左贡县| 沙田区| 丰镇市| 凤城市| 南靖县|