📅  最后修改于: 2023-12-03 14:40:14.861000             🧑  作者: Mango
有向图是计算机科学中的一种数据结构,它由一组节点(顶点)和边组成。每条边都有一个方向,表示从一个节点指向另一个节点。在 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 代码片段:
```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;
}