如何使用C++中的Dijkstra算法

如何使用c++中的dijkstra算法

如何使用C++中的Dijkstra算法?

Dijkstra算法是一种用于求解带权重有向图中两个顶点之间最短路径的贪心算法。它的核心思想是通过不断更新起始顶点到其他顶点的最短距离来逐步扩展最短路径。

下面将介绍如何使用C++实现Dijkstra算法,并给出具体的代码示例。

实现Dijkstra算法需要以下几个步骤:

立即学习“C++免费学习笔记(深入)”;

Step 1:初始化。

首先,我们需要初始化一些数据结构,包括起始顶点start、最短距离数组dist和访问状态数组visited。起始顶点start指定了最短路径的起点,最短距离数组dist用于记录起始顶点到其他顶点的当前最短距离,访问状态数组visited用于标记顶点是否已经被访问过。

Step 2:初始化最短距离数组。

将起始顶点到其他顶点的最短距离初始化为无穷大,起始顶点到自身的最短距离初始化为0。同时将起始顶点标记为已访问。

Step 3:更新最短距离数组。

对于起始顶点相邻的所有顶点,如果通过起始顶点能够找到更短的路径,则更新最短距离数组。具体的更新方式是将起始顶点到当前顶点的距离加上起始顶点到当前顶点的边的权重,与当前顶点原始的最短距离进行比较。

Step 4:选取下一个最近顶点。

从尚未访问的顶点中选取距离起始顶点最近的顶点作为下一个要访问的顶点。

Step 5:重复步骤3和步骤4。

重复步骤3和步骤4,直到所有的顶点都被访问过。最终,最短距离数组dist中存储的即为起始顶点到各个顶点的最短距离。

下面给出一个使用C++实现Dijkstra算法的代码示例:

#include #include #include using namespace std;vector dijkstra(vector<vector>& graph, int start) {    int numVertices = graph.size();    vector dist(numVertices, INT_MAX); // 最短距离数组    vector visited(numVertices, false); // 访问状态数组    dist[start] = 0;    for (int i = 0; i < numVertices - 1; i++) {        int minDist = INT_MAX;        int minIndex = -1;                // 选取下一个最近顶点        for (int j = 0; j < numVertices; j++) {            if (!visited[j] && dist[j] < minDist) {                minDist = dist[j];                minIndex = j;            }        }        visited[minIndex] = true;        // 更新最短距离数组        for (int j = 0; j < numVertices; j++) {            if (!visited[j] && graph[minIndex][j] && dist[minIndex] != INT_MAX && dist[minIndex] + graph[minIndex][j] < dist[j]) {                dist[j] = dist[minIndex] + graph[minIndex][j];            }        }    }    return dist;}int main() {    vector<vector> graph = {        {0, 2, 4, 0, 0},        {2, 0, 1, 3, 0},        {4, 1, 0, 0, 2},        {0, 3, 0, 0, 3},        {0, 0, 2, 3, 0}    };    vector shortestDist = dijkstra(graph, 0);    cout << "起始顶点到各个顶点的最短距离:" << endl;    for (int i = 0; i < shortestDist.size(); i++) {        cout << "到顶点 " << i << " 的最短距离为:" << shortestDist[i] << endl;    }    return 0;}

在上述代码中,我们通过一个二维矩阵表示带权重的有向图,矩阵中的每个元素表示两个顶点之间的边的权重。最终输出起始顶点到各个顶点的最短距离。

以上就是如何使用C++中的Dijkstra算法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1445488.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 22:33:46
下一篇 2025年12月9日 22:56:22

发表回复

登录后才能评论
关注微信