0

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

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

构建有向图的输入: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 ]

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

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

4

2 回答 2

2

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

想象一下下图:

    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,具体取决于您的算法将是什么。

于 2012-03-27T16:46:28.193 回答
0

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

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

于 2012-03-27T16:45:08.913 回答