【问题标题】:Using adjaceny matrix to solve graph problems使用邻接矩阵解决图问题
【发布时间】:2012-03-28 00:59:32
【问题描述】:

我只是想知道如何使用邻接矩阵来解决图问题。

例如,对于我的程序,我有两个项目的汇率。

构建有向图的输入:6 件衬衫 15 件袜子 构建有向图的输入:2 袜子 1 内衣

有向图:

衬衫--(6/15)-- 袜子--(2/1)-- 内衣

所以从衬衫到袜子的边是 6,从袜子到衬衫的边是 15,袜子到内衣是 2,内衣到袜子是 1。

要比较的输入:袜子衬衫 解决方案:15 袜子 6 衬衫

要比较的输入:衬衫内衣 解决方案:12 件衬衫 15 件内衣

我的问题是我怎样才能用邻接矩阵来表示它并能够获得它的权重来解决问题。

我正在考虑为上述问题使用一个看起来像这样的邻接矩阵。

          shirts   socks  underwear
shirts    [ 0       6     0 ]
socks     [ 15      0     2 ]
underwear [ 0       1     0 ]

这是一个好的开始吗?我试图在代码之前获取逻辑。

只是在寻找更多关于如何在更大范围内使用更多项目和单独图表来执行此操作的信息。

【问题讨论】:

  • 我可能误解了手头的问题,但我在这里没有看到图表。你的顶点是什么?袜子和衬衫?你的优势是什么?您想对这些应用哪种图形算法?
  • @amit:我认为 OP 希望将其视为一个二分图,其中一种颜色的顶点为衬衫,一种颜色为袜子。
  • @amit 说了什么。您要构建什么样的图表?老实说,我什至看不出你目前正在解决什么问题。您可能需要一个更清晰的示例来说明您要解决的问题以及如何使用邻接矩阵。
  • 是的,我的顶点是袜子和衬衫,边缘是从衬衫到袜子的 6/15,或者从袜子到衬衫的 15/6。我真的不知道任何图形算法,所以我试图找出最简单的方法。
  • @Claud25:你想达到什么目的?你的算法的输出应该是什么?如果您只想存储数据,我认为图表不是正确的解决方案。您可能需要multisethistogram [map<item,int>]

标签: c++ graph adjacency-matrix


【解决方案1】:

我会给你一个关于什么是邻接图的基本提示。解决你的问题是你的功课,所以我做不到。

想象下图:

    A-----B
   / \   | \
  /   \  |  \
 /     \ |   \
C-------D-----E

邻接矩阵告诉图中哪个节点与哪个节点相连:

    A  B  C  D  E
A [ 0  1  1  1  0 ]
B [ 1  0  0  1  1 ]
C [ 1  0  0  1  0 ]
D [ 1  1  1  0  1 ]
E [ 0  1  0  1  0 ]

例如条目 (D, E) 表明 D 和 E 相连,而 (A, E) 表明 A 和 E 不相连。注意这个矩阵是对称的,因为图是无向的。

如果矩阵的权重如下:

    A--3--B
   / \   | \
  5   3  2  1
 /     \ |   \
C---2---D--7--E

那么邻接矩阵显示了哪些是连接的以及具有什么权重(假设0表示没有连接):

    A  B  C  D  E
A [ 0  3  5  3  0 ]
B [ 3  0  0  2  1 ]
C [ 5  0  0  2  0 ]
D [ 3  2  2  0  7 ]
E [ 0  1  0  7  0 ]

在您的情况下,您的图表是一堆节点,它们具有与一堆其他节点的边。您的邻接矩阵看起来与您已经提出的非常相似,但值可能不正确。这些值应该是相同的,彼此为负,或者为 1,具体取决于您的算法。

【讨论】:

  • 我认为我的问题是使用有向图,这就是我有 6/15 的原因,因为从衬衫到袜子的边缘是 6,从袜子到衬衫的边缘是 15。跨度>
  • 我真的不知道你的问题,这些权重代表什么或者你需要计算什么,所以我真的不知道应该有什么值。我猜这将是你家庭作业解决方案的一部分。
  • 我要计算的是汇率,因此 6 件衬衫相当于 15 双袜子。无论哪种方式,您的图表都确实帮助了我。如果我想比较衬衫和袜子之间的汇率,那么 6 件衬衫相当于 15 双袜子。如果我想要袜子和衬衫之间的汇率,那么 15 双袜子相当于 6 件衬衫。我不知道这是否有意义,但就像我说的那样,到目前为止,您的回答都有帮助。
  • @Claud25,是的,我明白了。我也看到过类似的货币问题。
【解决方案2】:

This 是我之前写的关于如何使用邻接矩阵或邻接列表表示图形的 SO 帖子。

它讨论了解决Minimum Spanning Tree 图问题以及哪种数据结构适合解决该问题。我不确定您要通过图形问题完成什么,但这将是您如何表示图形的起点。如果您添加更多信息,我会尝试编辑我的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2017-07-24
    相关资源
    最近更新 更多