我正在尝试在C中实现一些图算法,使用邻接矩阵作为支持数据结构。 我需要实现一个加权图,其中weigths由实数表示。
假设0和负数对于边是正确的权重,我怎样才能表示两个节点之间没有边?
答案 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,但它不能保证定义,我认为无论如何使用无穷大在很多算法中工作得更好)