📜  cpp 中的有向图 - C++ (1)

📅  最后修改于: 2023-12-03 14:40:14.861000             🧑  作者: Mango

cpp 中的有向图 - C++

简介

有向图是计算机科学中的一种数据结构,它由一组节点(顶点)和边组成。每条边都有一个方向,表示从一个节点指向另一个节点。在 C++ 中,可以用多种方式来实现和操作有向图。

简单实现

下面是一个简单的用邻接矩阵表示有向图的 C++ 实现:

#include <iostream>
#include <vector>

using namespace std;

class DirectedGraph {
private:
    int numVertices;
    vector<vector<bool>> adjMatrix;

public:
    DirectedGraph(int n) {
        numVertices = n;
        adjMatrix.resize(numVertices, vector<bool>(numVertices));
    }

    void addEdge(int start, int end) {
        if (start >= 0 && start < numVertices && end >= 0 && end < numVertices) {
            adjMatrix[start][end] = true;
        }
    }

    void removeEdge(int start, int end) {
        if (start >= 0 && start < numVertices && end >= 0 && end < numVertices) {
            adjMatrix[start][end] = false;
        }
    }

    void printGraph() {
        for (int i = 0; i < numVertices; i++) {
            for (int j = 0; j < numVertices; j++) {
                cout << adjMatrix[i][j] << " ";
            }
            cout << endl;
        }
    }
};
使用示例
int main() {
    DirectedGraph graph(5);

    graph.addEdge(0, 1);
    graph.addEdge(1, 2);
    graph.addEdge(2, 3);
    graph.addEdge(3, 4);
    graph.addEdge(4, 0);

    graph.printGraph();

    return 0;
}
功能说明
  • DirectedGraph 类表示有向图,构造函数接受一个整数参数,指定图中节点的数量。
  • addEdge 函数用于在图中添加一条从指定起始节点到指定结束节点的边。
  • removeEdge 函数用于在图中移除一条从指定起始节点到指定结束节点的边。
  • printGraph 函数用于打印邻接矩阵形式的图。
Markdown 代码片段

下面是上述代码的 Markdown 代码片段:

```cpp
#include <iostream>
#include <vector>

using namespace std;

class DirectedGraph {
private:
    int numVertices;
    vector<vector<bool>> adjMatrix;

public:
    DirectedGraph(int n) {
        numVertices = n;
        adjMatrix.resize(numVertices, vector<bool>(numVertices));
    }

    void addEdge(int start, int end) {
        if (start >= 0 && start < numVertices && end >= 0 && end < numVertices) {
            adjMatrix[start][end] = true;
        }
    }

    void removeEdge(int start, int end) {
        if (start >= 0 && start < numVertices && end >= 0 && end < numVertices) {
            adjMatrix[start][end] = false;
        }
    }

    void printGraph() {
        for (int i = 0; i < numVertices; i++) {
            for (int j = 0; j < numVertices; j++) {
                cout << adjMatrix[i][j] << " ";
            }
            cout << endl;
        }
    }
};

int main() {
    DirectedGraph graph(5);

    graph.addEdge(0, 1);
    graph.addEdge(1, 2);
    graph.addEdge(2, 3);
    graph.addEdge(3, 4);
    graph.addEdge(4, 0);

    graph.printGraph();

    return 0;
}