【问题标题】:Graph representation图形表示
【发布时间】:2010-04-14 02:03:34
【问题描述】:

给定图形,我如何使用 adj 矩阵来表示它?我已经阅读了很多教程、帖子、幻灯片等,但我无法理解它,我只需要一点点推动。

【问题讨论】:

    标签: data-structures graph adjacency-matrix


    【解决方案1】:

    这是我对迷宫第一条水平线的尝试:

       A0 A1 A2 A3 A4 A5 A6 A7
    A0 0  1  0  0  0  0  0  0
    A1 1  0  0  0  0  0  0  0
    A2 0  0  0  1  0  0  0  0
    A3 0  0  1  0  0  0  0  0
    A4 0  0  0  0  0  1  0  0
    A5 0  0  0  0  1  0  0  0
    A6 0  0  0  0  0  0  0  0
    A7 0  0  0  0  0  0  0  0
    

    因此,您可以从中看出,由于边缘的无向性,您最终会得到一个对称矩阵,并且它的人口稀少。

    编辑:矩阵与列表

    adjacency list 的维基百科条目在每个算法的优势方面都有一些优点。

    编辑:

    Wikipedia entry for Adjacency Matrix:+)

    【讨论】:

    • 感谢您的努力,伙计。我很困惑,因为我这样做的方式不是对称的,所以我很确定这是错误的。但是当我想到 A1....F7 的想法时,我简直不敢相信。正如我问罗伯特的那样;在这种情况下,您认为矩阵或邻接表哪个更好?
    • 由于你的图的性质,低度和无向,我认为边缘列表是一个不错的选择。不过,您要应用于数据结构的算法也会影响您的决定。
    • 嘿,伙计,对不起,我错误地给你投了反对票代表/投票。谢谢和抱歉。
    • @Binary Nerd:不错的链接;P.... >
    【解决方案2】:

    每个字母数字组合都是图表中的一个节点,即从 A0、A1、A2、... 到 F5、F6、F7。您的图表有 48 个(迷宫中的 8 列乘以 6 行)节点,因此您需要一个 48x48 矩阵。如果将其视为布尔值,则将所有字段设置为 false,但两个节点之间存在连接的字段除外,例如A0 到 A1 意味着 A0 行在 A1 列中具有真值,反之亦然(因为您的图表是无向的)。

    【讨论】:

    • 好的,非常感谢。你认为在这种情况下使用邻接表会更好吗?因为 48x48 似乎有点多余(镜像)且效率低下。
    • 而这个矩阵,就其本质而言,是对称的,因此任何操作(当然还有存储)都只能在其中的一半上完成。
    • 每个顶点的度数最多为 4,所以邻接表会更有效率。
    • @polygenelubricants:谢谢哥们
    • 没错,但它是一个小图,而且矩阵在程序中通常比列表更容易处理。
    【解决方案3】:

    另一种方法是使用 2 个名为 HorVerboolean 矩阵分别跟踪水平和垂直移动的可能性。

    Hor Matrix: Dimension:6x9
    [X,YZ] 表示在实盘上从[X,Y] 水平移动到[X,Z] 的可能性。
    -1 表示边界

    例如:[A,01]true[F,-10] 也是。但是[B,23]false

       -10 01 12 23 34 45 56 67 7-1
    A
    B
    C
    D
    E
    F
    

    同样

    Ver Matrix:维度:7x8
    [XY,Z] 表示在实盘上从[X,Z] 垂直移动到[Y,Z] 的可能性。
    行中的Capital o 表示边界。
    例如:[DE,0]true[BC,7] 也是。但是[CD,0]false

        0 1 2 3 4 5 6 7
    
    OA
    AB
    BC
    CD
    DE
    EF
    FO
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 2019-01-03
      • 2021-11-11
      • 2010-12-16
      • 2021-08-28
      • 1970-01-01
      相关资源
      最近更新 更多