C语言实现迪杰斯特拉算法求解最短路径
{"title": "C语言实现迪杰斯特拉算法求解最短路径", "description": "本文介绍了使用迪杰斯特拉算法求解带权有向图最短路径的C语言代码实现。通过示例代码,详细解释了算法的步骤以及代码实现细节,并提供了一个具体的应用场景。", "keywords": "迪杰斯特拉算法, 最短路径, C语言, 数据结构, 图论, 算法实现", "content": "以下是一个使用迪杰斯特拉算法求解最短路径的C语言代码:\n\nc\\n#include <stdio.h>\\n#include <stdbool.h>\\n\\n#define INF 9999\\n#define V 6\\n\\nint minDistance(int dist[], bool sptSet[]) {\\n int min = INF, min_index;\\n\\n for (int v = 0; v < V; v++) {\\n if (!sptSet[v] && dist[v] <= min) {\\n min = dist[v];\\n min_index = v;\\n }\\n }\\n\\n return min_index;\\n}\\n\\nvoid printSolution(int dist[]) {\\n printf(\"顶点\t\t最短距离\n\");\\n for (int i = 0; i < V; i++) {\\n printf(\"%d\t\t%d\n\", i, dist[i]);\\n }\\n}\\n\\nvoid dijkstra(int graph[V][V], int src) {\\n int dist[V];\\n bool sptSet[V];\\n\\n for (int i = 0; i < V; i++) {\\n dist[i] = INF;\\n sptSet[i] = false;\\n }\\n\\n dist[src] = 0;\\n\\n for (int count = 0; count < V - 1; count++) {\\n int u = minDistance(dist, sptSet);\\n sptSet[u] = true;\\n\\n for (int v = 0; v < V; v++) {\\n if (!sptSet[v] && graph[u][v] && dist[u] != INF &&\\n dist[u] + graph[u][v] < dist[v]) {\\n dist[v] = dist[u] + graph[u][v];\\n }\\n }\\n }\\n\\n printSolution(dist);\\n}\\n\\nint main() {\\n int graph[V][V] = {\\n {0, 1, 4, 0, 0, 0},\\n {0, 0, 2, 5, 10, 0},\\n {0, 0, 0, 0, 3, 0},\\n {0, 0, 0, 0, 0, 1},\\n {0, 0, 0, 0, 0, 3},\\n {0, 0, 0, 0, 0, 0}\\n };\\n\\n int src = 0;\\n dijkstra(graph, src);\\n\\n return 0;\\n}\\n\n\n在上面的代码中,我们使用一个邻接矩阵来表示带权有向图G。V表示图中顶点的数量,INF表示无穷大的距离。minDistance函数用于找到距离src最近的顶点,printSolution函数用于打印最短路径结果。dijkstra函数使用迪杰斯特拉算法来计算最短路径。在main函数中,我们定义了一个示例图并调用dijkstra函数来求解最短路径。"
原文地址: https://www.cveoy.top/t/topic/pDM0 著作权归作者所有。请勿转载和采集!