【问题标题】:Graph implementation knowing edges ahead of time图形实现提前知道边
【发布时间】:2025-11-26 07:05:02
【问题描述】:

我正在寻找一种有效的方法来实现加权无向图,只知道提前的边数。

样本输入:
N(边数)
A B x (x 是 A 到 B 的距离)
.
.

我考虑过使用 Node* 的邻接列表(我需要知道邻居)并将节点存储在动态哈希表中(我不知道我会采用多少节点,所以我需要一个动态 - 搜索/插入 - 容器)。

有更好的方法吗?

对不起我的英语不好! :D

【问题讨论】:

    标签: data-structures graph hashtable adjacency-list


    【解决方案1】:

    鉴于您获得输入的格式,一个非常合理的方法是使用列表的哈希表,其中键是节点,值是(节点,距离)对的列表。或者,如果您有一个密集图并且希望能够快速确定从一个节点到另一个节点的距离,最好有一个哈希表的哈希表,其中*哈希表将节点映射到第二个哈希表,然后将原始节点具有边缘的每个节点映射到其成本。这仍然可以让您遍历节点的传出边,但可以更快地查找距离。

    另一个想法(取决于用例)是从构建第一个数据结构(列表的哈希表)开始,然后通过构建邻接矩阵对其进行后处理。如果您不需要遍历节点的传出边并且需要快速随机访问节点之间的距离,这将很有用。它类似于哈希表的哈希表,但可能更节省空间。

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回复。正如你所说,我做了一个列表(节点,距离)的哈希表。我不知道图形密度,我需要一个能够适应找到最小生成树的数据结构,以这种格式获取输入(考虑 Prim 的算法)...
    • @user1987545- 如果您需要查找 MST,您可以使用从节点到列表的哈希表映射。也就是说,如果您知道对于某个未知的 n,节点始终是从 1 到 n 的数字,那么标准的动态列表数组可能更合适。
    最近更新 更多