用C++生成:图的邻接矩阵的存储表示以及用邻接矩阵表示法创建无向网
时间: 2024-12-02 07:27:48 浏览: 133
在C++中,图的邻接矩阵是一种常用的存储图数据结构,它通过二维数组来表示图中各个顶点之间的连接。对于无向图,邻接矩阵是对称的,即如果节点A到B有边,那么节点B到A也必定有一条边。
以下是生成邻接矩阵并创建无向网的一个简单示例:
```cpp
#include <iostream>
#include <vector>
// 定义邻接矩阵类型的结构体
struct AdjacencyMatrix {
std::vector<std::vector<int>> matrix; // 二维整数数组
int vertices; // 图中顶点的数量
};
// 创建无向图的邻接矩阵
AdjacencyMatrix createUnweightedGraph(int numVertices, bool isDirected = false) {
AdjacencyMatrix graph;
graph.vertices = numVertices;
// 初始化一个全零的邻接矩阵
graph.matrix.resize(numVertices, std::vector<int>(numVertices, 0));
// 对于无向图,将每个边添加两次(从头节点到尾节点)
for (int i = 0; i < numVertices; ++i) {
for (int j = i + 1; j < numVertices; ++j) {
if (!isDirected || graph.matrix[i][j] == 0) { // 如果是无向图,跳过已经存在的边
// 添加边
graph.matrix[i][j] = 1; // 使用1表示存在边,更复杂的数据结构可以用于权值
graph.matrix[j][i] = 1; // 对应边的逆方向同样添加
}
}
}
return graph;
}
int main() {
int numVertices = 5;
AdjacencyMatrix graph = createUnweightedGraph(numVertices);
// 打印邻接矩阵
for (int i = 0; i < graph.vertices; ++i) {
for (int j = 0; j < graph.vertices; ++j) {
std::cout << "Node " << i << " - Node " << j << ": " << graph.matrix[i][j] << "\t";
}
std::cout << "\n";
}
return 0;
}
```
阅读全文