【发布时间】:2011-08-19 16:44:28
【问题描述】:
我正在尝试在 C 中实现一些图形算法,使用邻接矩阵作为支持数据结构。 我需要实现一个加权图,权重由实数表示。
鉴于 0 和负数是边的正确权重,我如何表示两个节点之间不存在边?
【问题讨论】:
-
嗯……也许是 C99 的
nan()
标签: c graph adjacency-matrix
我正在尝试在 C 中实现一些图形算法,使用邻接矩阵作为支持数据结构。 我需要实现一个加权图,权重由实数表示。
鉴于 0 和负数是边的正确权重,我如何表示两个节点之间不存在边?
【问题讨论】:
nan()
标签: c graph adjacency-matrix
您可以使用这样的结构来代替数字 (double):
struct weight
{
double weight;
bool edge_exists;
};
并创建weight 的邻接矩阵。因此,如果edge_exists 为假,则没有理由检查weight,否则weight 将有意义。
如果every(?)double 可能是一个可能的权重值,我会使用上述方法。
【讨论】:
那么荒谬的(我猜你是在假设所有权重都应该是正数)数字,例如 -1?
这将使代码保持简洁(无需添加额外的数据结构),并且易于记忆。
【讨论】:
如果您使用的是 C99 或更高版本,则可以使用在 math.h 中定义的 INFINITY 宏并为所有不存在的边分配 INFINITY 的权重。
在此处查看有关在 C 中使用无穷大的更多详细信息:How to use nan and inf in C?
(从技术上讲,您也可以使用 NaN,但不能保证定义它,而且我认为在很多算法中使用无穷大效果更好)
【讨论】: