如何使用C++实现邻接矩阵表示无向图和有向图,并详细说明构建过程?
时间: 2024-11-24 14:30:02 浏览: 53
在探讨图的表示方法时,邻接矩阵是一种直观且常用的数据结构。它利用二维数组来存储图中各顶点之间的连接关系,非常适合表示稠密图。下面将详细解析如何在C++中实现邻接矩阵来表示无向图和有向图。
参考资源链接:[C++实现:邻接矩阵与邻接表的无向图/有向图构造与输出](https://wenku.csdn.net/doc/89kedgjiyh?spm=1055.2569.3001.10343)
首先,定义顶点和边的关系是构建邻接矩阵的关键。在无向图中,如果顶点i和顶点j之间存在边,那么矩阵中A[i][j]和A[j][i]的值通常设为1,表示无向边。而在有向图中,如果从顶点i到顶点j存在一条边,那么A[i][j]的值设为1,A[j][i]保持为0,表示有向边。
以下是C++代码实现邻接矩阵的示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
const int MAX_VERTICES = 100; // 假设最多顶点数为100
// 邻接矩阵结构体
struct Graph {
int numVertices; // 顶点数量
vector<vector<int>> adjMatrix; // 邻接矩阵
Graph(int numVertices) : numVertices(numVertices), adjMatrix(numVertices, vector<int>(numVertices, 0)) {}
// 添加无向边
void addEdge(int src, int dest) {
adjMatrix[src][dest] = 1;
adjMatrix[dest][src] = 1; // 对于无向图,需要添加两边
}
// 添加有向边
void addDirectedEdge(int src, int dest) {
adjMatrix[src][dest] = 1; // 对于有向图,只添加一边
}
};
int main() {
int numVertices = 5; // 假设图有5个顶点
Graph g(numVertices);
// 添加边
g.addEdge(0, 1); // 添加无向边
g.addDirectedEdge(1, 2); // 添加有向边
// 输出邻接矩阵
for (int i = 0; i < numVertices; ++i) {
for (int j = 0; j < numVertices; ++j) {
cout << g.adjMatrix[i][j] <<
参考资源链接:[C++实现:邻接矩阵与邻接表的无向图/有向图构造与输出](https://wenku.csdn.net/doc/89kedgjiyh?spm=1055.2569.3001.10343)
阅读全文