数学建模社区-数学中国

标题: 图的广度优先算法以及广度优先生成树 [打印本页]

作者: 2744557306    时间: 2023-8-5 15:05
标题: 图的广度优先算法以及广度优先生成树
首先了解一下图的两种存储方式
邻接矩阵,如下为有向图的的邻接矩阵。对于A结点,可以通往B结点,在我们第一列的AB列就标识为1.对于C结点可以通往A结点,那么CA列就被标注为1。其他节点也一样。

+ }5 J% L' Y( L) h7 ~
邻接表,下图为有向图的邻接表矩阵,对于计算机而言,会对邻接表进行一个0开始的的排列。由这个排列的序号代表结点,对于A结点而言,它只有一条通道,指向BB的序号为2,所以就成了A->1。同理B指向CEF。也就对应的2459 s( G, [& {, M- M" K8 l- }

5 e( w' b& E- L% z# f# h6 b& Q/ p
了解了图的存储方式,我们就可以讲解图的广度优先算法了
对于下面的图我们对它进行广度优先算法,首先对2顶点进行广度优先算法,在图中,我们很容易得到2结点连接16结点。那么计算机是如何寻找呢?答案是在右边两个图的存储结构中寻找,在邻接矩阵中2结点的第一个点为1,所以结果为2 ->1.接下来再找2行中的元素(找邻接矩阵中的1)发现第二个元素为6。结果自然就变成了2 -> 1 ->6。在邻接矩阵中我们发现2行中已经没有元素了。接下来到下一个过程。我们寻找1的指向结点,在邻接矩阵中我们发现1指向5、指向2。由于2已经在我们的序列中了,意味着我们已经找到了且没有其他指向。所以结果为2 -> 1 ->6 ->5。接下来在找6结点中的元素,6元素指向237.所以2已经被找到,所以结果为2 ->1 ->6 ->5 ->3->7。接下来寻找5结点。我们发现5结点指向1结点,而1节点已经被找到。所以我们就跳到3结点,3结点指向467。所以结果为2 ->1 ->6 ->5 ->3 ->7 ->4。接下来在7结点中寻找。7结点指向6348。同样由于序列中已经有了634结点。所以我们的结果为2 ->1 ->6 ->5 ->3 ->7 ->4 -> 8
8 J- _6 K& b0 `# ^1 n% i
同理在邻接表中,也是这样的。但是由于邻接表的存储顺序并不一定会按照顺序存储。所以会出现2 - 6 - 1的现象。那么我们的结果就应该变为2 ->6 ->1 ->5 ->3 ->7 ->4 -> 8
广度优先生成树,是根据广度优先算法生成的。只要对图进行广度优先查询就一定可以得到一颗树,这棵树的名字就叫广度优先生成树。如下图所示:

2 b( `( \0 t" Q6 L  M9 _
4 a6 n2 Z; i4 Y. s" M+ K
2 {# k$ q4 |( ^- y

图的广度优先算法以及广度优先生成树.docx

498.74 KB, 下载次数: 0, 下载积分: 体力 -2 点






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5