在负编号节点上实现bfs

时间:2013-09-26 13:46:41

标签: c++ data-structures binary-tree binary-search-tree breadth-first-search

如果节点或顶点在C ++中编号为正,我们可以轻松实现广度优先搜索算法。

但是当节点或顶点编号为负数时如何处理它。

假设一个节点编号为-200,如果我们分配bool visited[-200] = true or false,则会产生运行时错误。

在这种情况下会采用什么方法?

2 个答案:

答案 0 :(得分:0)

“如果节点编号为负”〜>如果您需要每个节点都有一个唯一的标识符,用于访问某些容器中的这些节点,那么您没有理由允许这种标识符的值为负值。

就像你指出的那样:visited[-200] = true;毫无意义。如果您需要每个节点都有这种唯一的id / index,无论其中存储的值是什么,都要这样做,即:

struct Node {
    unsigned int id;
    int value;
    ...
};

答案 1 :(得分:0)

在处理图形标签时,似乎合理的方法是使用属性映射(参见例如Boost Graph Library。基本思想是通过结构化访问节点属性实际访问属性的细节的方法取决于所使用的具体属性映射。

根据您的说法,您使用节点ID访问标签。根据ID的实际布局,有两种明显的方法具有不同的特性:

  1. 如果节点标签相对密集并且值节点ID的范围已知,则使用具有使用偏移的适当调整的阵列是合理的方法。也就是说,你使用像label[nodeID - minNodeID]这样的数组。
  2. 如果节点标签是随机分布的,那么您将使用一个关联容器,其中节点ID作为容器的密钥。
  3. 如果您可以控制节点表示的布局,您应该考虑在节点中存储标签,尤其是在节点ID是随机分布的情况下。