117.info
人生若只如初见

图的最短路径算法在C++中的实现

以下是一个在C++中实现图的最短路径算法的示例代码,使用Dijkstra算法来计算从源节点到所有其他节点的最短路径:

#include 
#include 
#include 
#include 

using namespace std;

#define INF INT_MAX

// 定义图的数据结构
struct Edge {
    int to;
    int weight;
};

// Dijkstra算法函数
vector dijkstra(vector>& graph, int source) {
    int n = graph.size();
    vector dist(n, INF);
    dist[source] = 0;
    
    priority_queue, vector>, greater>> pq;
    pq.push({0, source});
    
    while (!pq.empty()) {
        int u = pq.top().second;
        pq.pop();
        
        for (Edge& e : graph[u]) {
            int v = e.to;
            int weight = e.weight;
            if (dist[u] + weight < dist[v]) {
                dist[v] = dist[u] + weight;
                pq.push({dist[v], v});
            }
        }
    }
    
    return dist;
}

int main() {
    // 构建图
    int n = 5; // 节点个数
    vector> graph(n);
    
    // 添加边
    graph[0].push_back({1, 10});
    graph[0].push_back({2, 5});
    graph[1].push_back({2, 2});
    graph[1].push_back({3, 1});
    graph[2].push_back({1, 3});
    graph[2].push_back({3, 9});
    graph[2].push_back({4, 2});
    graph[3].push_back({4, 4});
    graph[4].push_back({3, 6});
    
    // 计算最短路径
    vector shortestPaths = dijkstra(graph, 0);
    
    // 输出结果
    for (int i = 0; i < n; i++) {
        cout << "Shortest path from node 0 to node " << i << ": " << shortestPaths[i] << endl;
    }
    
    return 0;
}

在上面的代码中,首先定义了一个图的数据结构Edge,然后实现了Dijkstra算法的函数dijkstra来计算最短路径。最后在main函数中构建了一个图,计算了从节点0到其他节点的最短路径,并输出结果。

注意,以上示例代码只是一个简单的示例,实际应用中可能需要根据具体情况进行修改和优化。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fef43AzsBBgJUDQ.html

推荐文章

  • c# winform组件 怎样集成

    在C# WinForms应用程序中集成组件通常涉及以下几个步骤: 添加引用: 首先,确保你已经安装了所需的组件。例如,如果你想要集成一个第三方库,你需要将该库的DLL...

  • c# winform组件 怎样提高效率

    要提高C# WinForms应用程序的效率,可以从多个方面入手,包括优化绘图过程、使用异步操作、合理设置控件属性等。以下是一些具体的优化策略:
    优化绘图过程 ...

  • c# winform组件 怎样自定义

    在C#中,要自定义WinForms组件,您需要创建一个继承自现有控件的新类,并重写其构造函数、事件处理程序和其他相关方法。以下是一个简单的示例,说明如何创建一个...

  • c# winform组件 怎样选择合适

    在C# WinForms应用程序开发中,选择合适的组件对于构建高效、用户友好的界面至关重要。以下是一些选择合适组件的建议:
    控件选择 根据需求选择:选择控件时...

  • C++中图的搜索算法有哪些

    在C++中,图的搜索算法主要有以下几种: 深度优先搜索(Depth First Search,DFS):从起始节点开始,一直往下搜索直到无法再继续,然后返回上一层继续搜索。通常...

  • 如何在C++中构建复杂图结构

    在C++中构建复杂图结构可以使用多种方法,其中一种常用的方法是使用邻接列表或邻接矩阵来表示图结构。以下是一个简单的示例,展示如何在C++中构建一个有向图的邻...

  • 图的遍历算法在C++中如何实现

    在C++中实现图的遍历算法通常使用深度优先搜索(DFS)和广度优先搜索(BFS)两种方法。
    以下是一个使用邻接表表示图并实现DFS和BFS算法的示例代码:
    #...

  • C++中如何实现图的表示与存储

    在C++中,可以使用邻接矩阵或邻接表来表示和存储图。
    邻接矩阵表示法:
    #include #include using namespace std; const int MAX_V = 100; // 邻接矩阵...