在加权图的邻接矩阵中表示边缺失

时间:2011-05-05 20:10:04

标签: c graph adjacency-matrix

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

假设0和负数对于边是正确的权重,我怎样才能表示两个节点之间没有边?

3 个答案:

答案 0 :(得分:2)

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

struct weight
{
   double weight;
   bool edge_exists;
};

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

如果每个(?)double可能是一个可能的权重值,我会使用上面的内容。

答案 1 :(得分:0)

一个荒谬的(我猜你假设所有权重都应该是正数)怎么样的数字,比如-1?

这样可以使代码保持清晰(无需添加额外的数据结构),并且记忆起来很简单。

答案 2 :(得分:0)

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

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

(你也可以在技术上使用NaN,但它不能保证定义,我认为无论如何使用无穷大在很多算法中工作得更好)