如何在图形中实现add_vertex和add_edge函数
How to implement add_vertex and add_edge function in a graph?
我正在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
。
相关文章:
- Visual Studio - Cmake Project - Add NetCDF
- 提升图库示例 凯文培根的六度:示例中的 Vertex() 是什么
- 在 atomic() 中 ++、add operation 和 fetch_add() 有什么区别
- 图形"Vertex cover"暴力算法
- wxImageList::Add()始终返回0
- 函数 C::add() 中不允许将'C *'隐式转换为'A *'
- OpenGL,Cubemap,Vertex和FragmentShader
- C++有"not equal compare and exchange"或"fetch add on not equal"吗?
- gRPC trace.cc 的方法 TraceFlagList::Add(TraceFlag* flag) 使其链接列表
- 如何将用户定义的格式标志"add" basic_ostream?
- 'Cannot add two pointers'添加带有 WCHAR 的 LPCWSTR
- 在创建完整对象之前编写 if-can-add check 方法的正确方法?
- 为什么 VERTEX 着色器中的矩阵乘法无法正常工作
- CMake add library libpq (postgreSQL) mac c++ clion
- 尝试使用 SFLM 顶点时出错:"Vertex is not a member of sf"
- 收到错误:C3867 '<int>Template_class::add':非标准语法;将指针指向带有模板的函数时
- 呼叫'php :: Extension :: add()没有匹配函数
- 使用intel内联汇编程序对bigint-add进行进位编码
- 在 OpenGL 计划链路状态检查期间"No definition of main in vertex shader"
- 在调用GllinkProgram()之前,Vertex着色器和碎片着色器(S)无法编译