c语言生成动态规划最短路径问题
时间: 2023-12-10 15:35:54 浏览: 101
动态规划最短路径问题可以使用Dijkstra算法或者Bellman-Ford算法来解决。下面是使用Dijkstra算法的C语言代码示例:
```c
#include <stdio.h>
#include <limits.h>
#define MAX 100
int distra(int graph[MAX][MAX], int src, int dest) {
int dist[MAX];
int visited[MAX] = {0};
int i, j, min_dist, min_index;
for (i = 0; i < MAX; i++) {
dist[i] = INT_MAX;
}
dist[src] = 0;
for (i = 0; i < MAX - 1; i++) {
min_dist = INT_MAX;
for (j = 0; j < MAX; j++) {
if (!visited[j] && dist[j] <= min_dist) {
min_dist = dist[j];
min_index = j;
}
}
visited[min_index] = 1;
for (j = 0; j < MAX; j++) {
if (!visited[j] && graph[min_index][j] && dist[min_index] != INT_MAX && dist[min_index] + graph[min_index][j] < dist[j]) {
dist[j] = dist[min_index] + graph[min_index][j];
}
}
}
return dist[dest];
}
int main() {
int graph[MAX][MAX] = {{0, 1, 2, 0},
{1, 0, 0, 3},
{2, 0, 0, 4},
{0, 3, 4, 0}};
int src = 0, dest = 3;
int shortest_path = dijkstra(graph, src, dest);
printf("Shortest path from %d to %d is %d\n", src, dest, shortest_path);
return 0;
}
```
上述代码中,我们使用了邻接矩阵来表示图,其中0表示两个节点之间没有边,其他数字表示边的权重。我们使用了Dijkstra算法来计算最短路径,其中dist数组用于保存源节点到各个节点的最短距离,visited数组用于标记节点是否已经被访问过。
阅读全文