代克斯特拉演算法C代码

代克斯特拉演(Dijkstra)算法是一个用于找出图中单源最短路径问题的算法。下面是一个使用C语言实现的Dijkstra算法的例子。这个例子假定图是以邻接矩阵的形式表示的,并且图中的边权重是非负的。

#include <stdio.h>
#include <limits.h>

#define V 9  // 假设图中有9个顶点

int minDistance(int dist[], bool sptSet[]) {
    int min = INT_MAX, min_index;

    for (int v = 0; v < V; v++)
        if (sptSet[v] == false && dist[v] <= min)
            min = dist[v], min_index = v;

    return min_index;
}

void printSolution(int dist[]) {
    printf("Vertex   Distance from Source\n");
    for (int i = 0; i < V; i++)
        printf("%d \t\t %d\n", i, dist[i]);
}

void dijkstra(int graph[V][V], int src) {
    int dist[V];
    bool sptSet[V];

    for (int i = 0; i < V; i++)
        dist[i] = INT_MAX, sptSet[i] = false;

    dist[src] = 0;

    for (int count = 0; count < V - 1; count++) {
        int u = minDistance(dist, sptSet);

        sptSet[u] = true;

        for (int v = 0; v < V; v++)
            if (!sptSet[v] && graph[u][v] && dist[u] != INT_MAX && dist[u] + graph[u][v] < dist[v])
                dist[v] = dist[u] + graph[u][v];
    }

    printSolution(dist);
}

int main() {
    int graph[V][V] = {{0, 4, 0, 0, 0, 0, 0, 8, 0},
                       {4, 0, 8, 0, 0, 0, 0, 11, 0},
                       {0, 8, 0, 7, 0, 4, 0, 0, 2},
                       {0, 0, 7, 0, 9, 14, 0, 0, 0},
                       {0, 0, 0, 9, 0, 10, 0, 0, 0},
                       {0, 0, 4, 14, 10, 0, 2, 0, 0},
                       {0, 0, 0, 0, 0, 2, 0, 1, 6},
                       {8, 11, 0, 0, 0, 0, 1, 0, 7},
                       {0, 0, 2, 0, 0, 0, 6, 7, 0}};

    dijkstra(graph, 0);

    return 0;
}

这个代码首先定义了一个minDistance函数,用于在未包含在最短路径树中的顶点中找到距离源点最近的顶点。dijkstra函数是实现Dijkstra算法的主要函数,它使用一个布尔数组sptSet来跟踪已经包含在最短路径树中的顶点,并使用一个dist数组来存储从源点到每个顶点的最短距离。在main函数中,我们定义了一个图的邻接矩阵,并调用dijkstra函数来找出从顶点0到其他所有顶点的最短路径。

注意:在实际应用中,你可能需要根据具体的图结构和需求对代码进行调整。此外,这个实现假设了图中没有负权重的边。如果你的图中包含负权重的边,你可能需要使用其他算法,如Bellman-Ford算法。

最近更新

  1. TCP协议是安全的吗?

    2024-04-04 07:22:01       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-04 07:22:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-04 07:22:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-04 07:22:01       18 阅读

热门阅读

  1. 巧用lambda表达式构建各种“树”

    2024-04-04 07:22:01       17 阅读
  2. Rust 中的字符串类型:`&str` 和 `String`

    2024-04-04 07:22:01       13 阅读
  3. Cocos Creator 定时任务

    2024-04-04 07:22:01       15 阅读
  4. 数字资产与数据资产的区别

    2024-04-04 07:22:01       14 阅读
  5. 云原生数据库特征

    2024-04-04 07:22:01       11 阅读
  6. 对比传统交易模式与基于区块链的交易模式

    2024-04-04 07:22:01       12 阅读
  7. FreeRTPS 第二章 列表

    2024-04-04 07:22:01       12 阅读
  8. 精进TypeScript--习惯结构类型(Structual Typing)

    2024-04-04 07:22:01       16 阅读
  9. qt 窗体之间的调用

    2024-04-04 07:22:01       11 阅读
  10. 基于socket的回射服务器

    2024-04-04 07:22:01       11 阅读