图的结构体定义
时间: 2023-07-21 22:06:32 浏览: 38
图是由一组节点和一组连接这些节点的边组成的数据结构。以下是一个简单的图的结构体定义:
```c++
struct Node {
int val; // 节点的值
vector<Node*> neighbors; // 与该节点相邻的节点集合
};
struct Graph {
vector<Node*> nodes; // 节点集合
};
```
节点结构体包含节点的值和与该节点相邻的节点集合。相邻节点通过边相连接。图结构体包含节点集合,每个节点可以通过其相邻节点集合中的指针相互连接。
相关问题
(1) 图的邻接矩阵结构体定义
邻接矩阵是一种常用的图存储方式,可以使用结构体定义来实现:
```c
#define MAX_VERTEX_NUM 100 // 最大顶点数
// 顶点结构体
typedef struct {
// 顶点信息,可以根据需要进行扩展
int data;
} VertexType;
// 邻接矩阵结构体
typedef struct {
VertexType vexs[MAX_VERTEX_NUM]; // 顶点数组
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵数组
int vexnum; // 顶点数
int arcnum; // 弧数
} MGraph;
```
其中,`vexs`数组存储每个顶点的信息,`arcs`二维数组存储每条边的权值或是否存在,`vexnum`表示顶点数,`arcnum`表示边数。
用结构体定义图,并给我代码
当然可以!以下是一个用结构体定义图的示例代码:
```c++
#include <iostream>
#include <vector>
struct Edge {
int src;
int dest;
int weight;
};
struct Graph {
int V; // 图的顶点数
std::vector<Edge> edges; // 存储图的边集合
Graph(int v) {
V = v;
}
void addEdge(int src, int dest, int weight) {
Edge edge;
edge.src = src;
edge.dest = dest;
edge.weight = weight;
edges.push_back(edge);
}
};
int main() {
int V = 5; // 图的顶点数
Graph graph(V);
// 添加边
graph.addEdge(0, 1, 10);
graph.addEdge(1, 2, 20);
graph.addEdge(2, 3, 30);
graph.addEdge(3, 4, 40);
graph.addEdge(4, 0, 50);
// 输出图的边
std::cout << "图的边:" << std::endl;
for (const auto& edge : graph.edges) {
std::cout << edge.src << " -> " << edge.dest << ", 权重:" << edge.weight << std::endl;
}
return 0;
}
```
以上代码定义了一个结构体 `Edge`,表示图中的一条边,包括源顶点、目标顶点和权重。另外,定义了结构体 `Graph`,表示一个图,包括顶点数量和边集合。在 `Graph` 中,有一个 `addEdge` 函数用于添加边。在 `main` 函数中,创建了一个具有5个顶点的图,并添加了一些边,然后输出了所有的边。
希望对你有所帮助!如果你还有其他问题,请随时提问。