64,282
社区成员
发帖
与我相关
我的任务
分享
class My_graph {
private:
// 边节点
class Edge_node {
public:
unsigned int vertex_id; // 顶点
int edge_data; // 边信息,如权重
Edge_node* next{ nullptr };
Edge_node() = default;
Edge_node(unsigned int v_id, int edge_info) {
this->vertex_id = v_id;
this->edge_data = edge_info;
next = nullptr;
}
};
// 顶点节点
class Vertex_node {
public:
int vertex_data; // 顶点数据
Edge_node* first_edge_node{ nullptr };
Vertex_node() = default;
Vertex_node(int vertex_data) {
this->vertex_data = vertex_data;
}
};
vector<Vertex_node> vertices;
public:
My_graph() = default;
void add_vertex(int vertex_data); // 添加顶点,并返回顶点在vector中的下标
bool add_edge(unsigned int v1,unsigned int v2, int edge_data=0);
};
void My_graph::add_vertex(int vertex_data) {
vertices.push_back(Vertex_node(vertex_data)); // 添加顶点
}
// 就是下面这个增加边的函数!!!
bool My_graph::add_edge(unsigned int v1,unsigned int v2, int edge_data) {
// new一个边节点,什么时候delete??????????????????????????????????
Edge_node* p = new Edge_node(v2, edge_data);
if (!p) {
return false;
}
// 前插法插入边节点
p->next = vertices[v1].first_edge_node;
vertices[v1].first_edge_node = p;
return true;
}