c++邻接表

邻接表是图的一种常用存储方式,它通过一个数组来存储图中的顶点,数组的每个元素表示一个顶点,每个顶点都有一个指针指向与之相邻的顶点列表。

邻接表的主要优点是节省了存储空间,尤其在稀疏图中,只存储了实际存在的边。另外,邻接表能够高效地查询一个顶点的邻居。但是,它的缺点是在查询两个顶点之间是否有边时需要遍历整个邻边表,时间复杂度较高。

下面是一个使用邻接表存储图的示例代码:

#include<iostream>
#include<vector>

using namespace std;

// 邻接表节点
struct AdjListNode {
    int dest; // 目标顶点
    struct AdjListNode* next; // 指向下一个节点
};

// 邻接表头节点
struct AdjList {
    struct AdjListNode* head; // 链表头指针
};

// 图
class Graph {
    private:
        int V; // 图的顶点数
        vector<struct AdjList> adj; // 邻接表

    public:
        // 构造函数
        Graph(int V) {
            this->V = V;
            adj.resize(V);
            for (int i = 0; i < V; ++i) {
                adj[i].head = NULL;
            }
        }

        // 添加边
        void addEdge(int src, int dest) {
            struct AdjListNode* newNode = new AdjListNode;
            newNode->dest = dest;
            newNode->next = adj[src].head;
            adj[src].head = newNode;

            newNode = new AdjListNode;
            newNode->dest = src;
            newNode->next = adj[dest].head;
            adj[dest].head = newNode;
        }

        // 打印图
        void printGraph() {
            for (int v = 0; v < V; ++v) {
                struct AdjListNode* pCrawl = adj[v].head;
                cout << "顶点 " << v << " 的邻接列表为:";
                while (pCrawl) {
                    cout << " -> " << pCrawl->dest;
                    pCrawl = pCrawl->next;
                }
                cout << endl;
            }
        }
};

int main() {
    Graph graph(5);
    graph.addEdge(0, 1);
    graph.addEdge(0, 4);
    graph.addEdge(1, 2);
    graph.addEdge(1, 3);
    graph.addEdge(1, 4);
    graph.addEdge(2, 3);
    graph.addEdge(3, 4);

    graph.printGraph();

    return 0;
}

在上面的代码中,Graph类表示一个图,它有一个私有成员变量V表示图的顶点数,一个私有vector&lt;struct AdjList> adj表示邻接表。构造函数用来初始化邻接表,addEdge方法用来添加边,printGraph方法用来打印图的邻接表。

main函数中,我们创建了一个含有5个顶点的图,并添加了一些边,然后调用printGraph方法打印图的邻接表。

以上就是C++中邻接表的详解。

相关推荐

  1. c++邻接

    2024-07-18 05:12:02       21 阅读
  2. 邻接存储图(c++题解)

    2024-07-18 05:12:02       44 阅读
  3. c++邻接矩阵

    2024-07-18 05:12:02       23 阅读
  4. 有向图的邻接邻接矩阵

    2024-07-18 05:12:02       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 05:12:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 05:12:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 05:12:02       62 阅读
  4. Python语言-面向对象

    2024-07-18 05:12:02       72 阅读

热门阅读

  1. Swift 数据类型

    2024-07-18 05:12:02       24 阅读
  2. 入门C语言只需一个星期(星期二)

    2024-07-18 05:12:02       23 阅读
  3. 国产大模型体验:DeepSeek、Kimi与智谱清言

    2024-07-18 05:12:02       22 阅读
  4. 雅思词汇及发音积累 2024.7.17

    2024-07-18 05:12:02       29 阅读
  5. PHP开发工具:打造高效的编码体验

    2024-07-18 05:12:02       22 阅读
  6. 理解 App Store 审核规则 3.2(f):预防被拒绝的方法

    2024-07-18 05:12:02       24 阅读
  7. VINS介绍

    2024-07-18 05:12:02       27 阅读
  8. CST高频仿真的网格技术

    2024-07-18 05:12:02       35 阅读