c++邻接矩阵

邻接矩阵是图的一种常见的表示方式。在C++中,可以通过二维数组来实现邻接矩阵。

邻接矩阵是一个二维数组,其中的元素表示图中节点之间的连接关系。对于一个有n个节点的图,邻接矩阵是一个n * n的二维数组。假设图中的节点编号从0到n-1,则邻接矩阵中的元素A[i][j]表示节点i和节点j之间是否存在边,通常用1或0表示有无边的情况。

邻接矩阵的优点是可以快速地查询两个节点之间是否有边,时间复杂度是O(1)。而缺点是当图中边的数量较少时,邻接矩阵会占用较多的存储空间,因为大部分元素都是0。

下面是一个用C++实现邻接矩阵的示例代码:

#include <iostream>
#include <vector>

using namespace std;

class Graph {
private:
    int numVertices;
    vector<vector<int>> matrix;

public:
    Graph(int num) {
        numVertices = num;
        matrix = vector<vector<int>>(num, vector<int>(num, 0)); // 初始化邻接矩阵为全0
    }

    void addEdge(int src, int dest) {
        if (src >= 0 && src < numVertices && dest >= 0 && dest < numVertices) {
            matrix[src][dest] = 1; // 在邻接矩阵中设置边的连接关系
        }
    }

    bool hasEdge(int src, int dest) {
        if (src >= 0 && src < numVertices && dest >= 0 && dest < numVertices) {
            return matrix[src][dest] == 1; // 判断邻接矩阵中两个节点之间是否有边
        }
        return false;
    }
};

int main() {
    Graph graph(4);
  
    graph.addEdge(0, 1);
    graph.addEdge(1, 2);
    graph.addEdge(2, 3);
    graph.addEdge(3, 0);
  
    cout << "Edge between 0 and 1: " << (graph.hasEdge(0, 1) ? "Yes" : "No") << endl;
    cout << "Edge between 1 and 3: " << (graph.hasEdge(1, 3) ? "Yes" : "No") << endl;
    cout << "Edge between 2 and 0: " << (graph.hasEdge(2, 0) ? "Yes" : "No") << endl;
    cout << "Edge between 3 and 2: " << (graph.hasEdge(3, 2) ? "Yes" : "No") << endl;
  
    return 0;
}

这段代码中,我们首先定义了一个Graph类,其中包含了一个私有变量numVertices表示节点的数量,以及一个私有变量matrix表示邻接矩阵。Graph类还定义了addEdge和hasEdge两个方法,分别用来添加边和判断边的存在。

在main函数中,我们创建了一个有4个节点的图,并添加了一些边。然后我们通过调用hasEdge方法来判断某些边的存在。

输出结果为:

Edge between 0 and 1: Yes
Edge between 1 and 3: No
Edge between 2 and 0: No
Edge between 3 and 2: Yes

可以看到,图中存在的边可以被正确地判断出来。

相关推荐

  1. c++邻接矩阵

    2024-07-17 22:14:03       24 阅读
  2. 图的邻接矩阵表示

    2024-07-17 22:14:03       50 阅读
  3. 有向图的邻接表和邻接矩阵

    2024-07-17 22:14:03       54 阅读
  4. c++邻接

    2024-07-17 22:14:03       21 阅读

最近更新

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

    2024-07-17 22:14:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 22:14:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 22:14:03       62 阅读
  4. Python语言-面向对象

    2024-07-17 22:14:03       72 阅读

热门阅读

  1. Mojo 编程语言简介

    2024-07-17 22:14:03       24 阅读
  2. 量化交易策略的优化与回测

    2024-07-17 22:14:03       24 阅读
  3. 测试面试题(八)

    2024-07-17 22:14:03       23 阅读
  4. IDEA常用配置

    2024-07-17 22:14:03       22 阅读
  5. 分类题解清单

    2024-07-17 22:14:03       27 阅读
  6. sourcetree 下载地址

    2024-07-17 22:14:03       23 阅读
  7. DATE_SUB 的用法

    2024-07-17 22:14:03       22 阅读
  8. 【C++】C++中的堆和栈介绍和区别

    2024-07-17 22:14:03       25 阅读
  9. httpClient传输文件

    2024-07-17 22:14:03       22 阅读
  10. 关于Apache Iceberg

    2024-07-17 22:14:03       24 阅读