如何在图形中实现add_vertex和add_edge函数

How to implement add_vertex and add_edge function in a graph?

本文关键字:add vertex edge 函数 实现 图形      更新时间:2023-10-16

我正在C++创建一个模板化图形数据结构,我正在研究add_vertex和add_edge函数。

对于add_vertex函数,我尝试使用邻接矩阵并将其设置为 false。但是,我不确定我是否正确。

下面是一段代码:

template<typename vertex>
class directed_graph
{
    private:
            std::vector<std::vector<bool> > adj_matrix;
            size_t size;
            int num_of_vertices;
    public:
            void add_vertex(const vertex&); 
            void add_edge(const vertex&, const vertex&); 
}

template <typename vertex> 
void directed_graph<vertex>::add_vertex(const vertex& u) 
{
int newVertexNumber = num_of_vertices;
num_of_vertices++;
for(int i = 0; i<num_of_vertices; i++)
{
    adj_matrix[i][newVertexNumber] = false;
    adj_matrix[newVertexNumber][i] = false;
}
newVertexNumber = u;
}

template <typename vertex>
void directed_graph<vertex>::add_edge(const vertex& u, const vertex& v) 
{
 if ((u >= 0) && (u < size) && (v >= 0) && (v < size) && (u != v))
     {
    adj_matrix[u][v] = true;        
    adj_matrix[v][u] = true;
 }
}

对于像"const vertex&u"这样的方法参数,我不太确定是否可以将顶点类型传递给adj_matrix[][]中的索引。所以,我想我需要某种方法来提取矩阵中 u 和 v 的索引(位置(,然后将索引传递给 adj_matrix[index_u][index_v],但我不确定如何。请帮忙,谢谢。

添加新顶点时,matix 大小也必须更改,std::vector不会在写入时自动调整大小。

// Extend the matrix
int n = adj_matrix.size();
adj_matrix.resize(n+1);          // Add one more row
for (auto& row : adj_matrix) {
    row.resize(n+1);             // Add one more column to each row
}

请注意,bool向量中的新元素会自动初始化为 false,除非明确告知使用 true