使用邻接矩阵来解决图形问题

时间:2012-03-27 16:27:57

标签: c++ graph adjacency-matrix

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

例如,对于我的计划,我有两个项目的汇率。

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

定向图:

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

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

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

输入比较:衬衫内衣 Soltuion:12件衬衫15件内衣

我的问题是如何用邻接矩阵来表示这一点,并能够解决问题。

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

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

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

只需查看有关如何使用更多项目和单独图表进行更大规模的更多信息。

2 个答案:

答案 0 :(得分: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,具体取决于算法的大小。

答案 1 :(得分:0)

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

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