117.info
人生若只如初见

C++ Dijkstra算法怎样实现图的输入

在C++中,可以使用邻接矩阵或邻接表来表示图,并实现Dijkstra算法。以下是使用邻接表表示图的示例代码:

#include 
#include 
#include 
#include 

using namespace std;

struct Node {
    int dest;
    int weight;
};

class Graph {
private:
    int V;
    vector> adjList;

public:
    Graph(int vertices) {
        V = vertices;
        adjList.resize(V);
    }

    void addEdge(int src, int dest, int weight) {
        Node node = { dest, weight };
        adjList[src].push_back(node);
    }

    void dijkstra(int src) {
        vector dist(V, INT_MAX);
        dist[src] = 0;

        priority_queue, vector>, greater>> pq;
        pq.push({ 0, src });

        while (!pq.empty()) {
            int u = pq.top().second;
            pq.pop();

            for (Node neighbor : adjList[u]) {
                int v = neighbor.dest;
                int weight = neighbor.weight;

                if (dist[u] + weight < dist[v]) {
                    dist[v] = dist[u] + weight;
                    pq.push({ dist[v], v });
                }
            }
        }

        cout << "Shortest distances from source " << src << " to other vertices:" << endl;
        for (int i = 0; i < V; i++) {
            cout << "Vertex " << i << ": " << dist[i] << endl;
        }
    }
};

int main() {
    Graph g(6);

    g.addEdge(0, 1, 5);
    g.addEdge(0, 2, 3);
    g.addEdge(1, 3, 6);
    g.addEdge(1, 4, 2);
    g.addEdge(2, 1, 1);
    g.addEdge(2, 4, 4);
    g.addEdge(3, 5, 8);
    g.addEdge(4, 5, 7);

    g.dijkstra(0);

    return 0;
}

在这个示例中,首先创建一个Graph类来表示图,其中包括顶点数量V和邻接表adjList。addEdge函数用于添加边,dijkstra函数用于计算从源顶点到其他顶点的最短路径。

在main函数中,创建一个Graph对象并添加边,然后调用dijkstra函数计算最短路径。输出结果为从源顶点0到其他顶点的最短距离。您可以根据自己的需求修改顶点数量和边的权重来自定义图。

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

推荐文章

  • 为什么C# Playwright很受欢迎

    C# Playwright 是一种用于自动化测试的工具,它很受欢迎的原因有以下几点: C# Playwright 提供了一个简单易用的 API,使得编写和维护自动化测试脚本变得更加容易...

  • C# Playwright是否适合新手

    对于新手来说,C# Playwright可能会有一定的学习曲线。C#是一种强类型语言,对于没有编程经验的新手来说可能会有一定的挑战。同时,Playwright是一个功能强大的自...

  • C# Playwright中的并发测试怎么做

    在C# Playwright中进行并发测试可以使用多线程的方式来实现。以下是一个简单的示例代码,演示如何使用多线程并发运行Playwright测试:
    using System;
    ...

  • C# Playwright测试报告如何生成

    在C#中使用Playwright进行测试后,可以使用不同的方法来生成测试报告。一种常见的方法是使用测试运行器(如NUnit或xUnit)来运行测试并生成测试报告。这些测试运...

  • C++ Dijkstra算法有哪些变种

    A*算法:在Dijkstra算法的基础上引入了启发式函数,可以更加有效地搜索最短路径。 双向Dijkstra算法:从起点和终点分别进行Dijkstra算法搜索,当两个搜索路径相遇...

  • C++ Dijkstra算法如何进行路径恢复

    在使用Dijkstra算法求解最短路径问题时,可以通过记录每个节点的前驱节点来实现路径的恢复。具体步骤如下: 在初始化时,除了记录每个节点的最短距离之外,还需要...

  • C++ Dijkstra算法能否用于GPS导航

    是的,C++中的Dijkstra算法可以用于GPS导航。Dijkstra算法是一种用于寻找图中最短路径的算法,可以帮助GPS系统计算从起点到目的地的最短路径。通过在图中的节点之...

  • C++ Dijkstra算法的空间复杂度

    Dijkstra算法的空间复杂度为O(V),其中V是图中顶点的数量。在Dijkstra算法中,需要维护一个优先队列(最小堆)来存储顶点的最短路径估计值,并在每次迭代中更新该...