【问题标题】:Representing edge absence in adjacency matrix of weighted graph表示加权图的邻接矩阵中的边缺失
【发布时间】:2011-08-19 16:44:28
【问题描述】:

我正在尝试在 C 中实现一些图形算法,使用邻接矩阵作为支持数据结构。 我需要实现一个加权图,权重由实数表示。

鉴于 0 和负数是边的正确权重,我如何表示两个节点之间不存在边?

【问题讨论】:

  • 嗯……也许是 C99 的 nan()

标签: c graph adjacency-matrix


【解决方案1】:

您可以使用这样的结构来代替数字 (double):

struct weight
{
   double weight;
   bool edge_exists;
};

并创建weight 的邻接矩阵。因此,如果edge_exists 为假,则没有理由检查weight,否则weight 将有意义。

如果every(?)double 可能是一个可能的权重值,我会使用上述方法。

【讨论】:

    【解决方案2】:

    那么荒谬的(我猜你是在假设所有权重都应该是正数)数字,例如 -1?

    这将使代码保持简洁(无需添加额外的数据结构),并且易于记忆。

    【讨论】:

    • 对不起,我忘了说负数被接受为权重
    • 时髦!好的,平等的答案现在看起来不错:)
    【解决方案3】:

    如果您使用的是 C99 或更高版本,则可以使用在 math.h 中定义的 INFINITY 宏并为所有不存在的边分配 INFINITY 的权重。

    在此处查看有关在 C 中使用无穷大的更多详细信息:How to use nan and inf in C?

    (从技术上讲,您也可以使用 NaN,但不能保证定义它,而且我认为在很多算法中使用无穷大效果更好)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多