图的生成树与生成森林

您所在的位置:网站首页 图的生成树唯一性确定吗 图的生成树与生成森林

图的生成树与生成森林

2024-07-12 10:53| 来源: 网络整理| 查看: 265

文章目录 连通图与连通分量强连通图与强连通分量图的连通性判断生成树深度优先生成树邻接表邻接矩阵 广度优先生成树邻接表邻接矩阵 生成森林 获取边弧的权值源代码

连通图与连通分量

在无向图中, 若从顶点v到顶点w有路径存在, 则称v和w是连通的. 若图G中任意两个顶点都是连通的, 则称图G为连通图, 否则称为非连通图. 无向图中的极大连通子图称为连通分量, 在图(a)中, 图G有3个连通分量如图(b)所示.

假设一个图有n个顶点, 如果边数小于n-1, 那么此图必是非连通图. 如果图是非连通图, 那么最多可以有多少条边?

image-20230106170643111

强连通图与强连通分量

在有向图中, 如果有一对顶点v和w, 从v到w和从w到v之间都有路径, 则称这两个顶点是强连通的. 若图中任何一对顶点都是强连通的, 则称此图为强连通图. 有向图中的极大强连通子图称为有向图的强连通分量, 图G的强连通分量如图(b)所示。

假设一个有向图有n个顶点, 如果是强连通图, 那么最少需要有多少条边.

image-20230106172402815

图的连通性判断

图的遍历算法可以用来判断图的连通性.

对于无向图来说, 若无向图是连通的, 则从任一结点出发, 仅需一次遍历就能够访问图中的所有顶点; 若无向图是非连通的, 则从某一个顶点出发, 一次遍历只能访问到该顶点所在连通分量的所有顶点, 而对于图中其他连通分量的顶点, 则无法通过这次遍历访问.

对于有向图来说, 若从某一顶点到图中的每个顶点都有路径, 则能够访问到图中的所有顶点, 否则不能访问到所有顶点. 因此判断有向图的强连通性, 需要依次从所有顶点出发遍历, 只有从所有顶点出发遍历到其它所有顶点, 该有向图才具有强连通性, 如果从某一个顶点出发遍历, 不能连续遍历到其它顶点, 则该有向图不具有强连通性.

邻接表

bool _IsConnected(int srci) { int n = static_cast(_vertexSet.size()); vector markbit(n, false); queue q; q.push(srci); markbit[srci] = true; // 类似广度优先遍历的思想 while (!q.empty()) { auto front = q.front(); q.pop(); Edge* curr = _table[front]; while (curr != nullptr) { if (!markbit[curr->_dsti]) { q.push(curr->_dsti); markbit[curr->_dsti] = true; } curr = curr->_next; } } // 如果还有顶点没有遍历到,说明不是连通图 for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3