【数据结构笔记】5:图的邻接表结构下求无向图的连通分量
来源:互联网 发布:c语言输出一个整数 编辑:程序博客网 时间:2024/06/14 05:21
对于图的邻接表存储结构,有以下数据成员:
int vexNum, vexMaxNum, arcNum;// 顶点数目、允许的顶点最大数目和边数AdjListNetWorkVex<ElemType, WeightType> *vexTable;// 顶点表mutable Status *tag; // 标志数组WeightType infinity;// 无穷大的值
其中顶点节点的数据成员:
ElemType data;// 数据元素值AdjListNetworkArc<WeightType> *firstarc;// 指向邻接链表边结点的指针
其中边节点的数据成员:
int adjVex;// 弧头顶点序号WeightType weight;// 边的权值AdjListNetworkArc<WeightType> *nextarc; // 下一条边结点的指针
要实现求无向图的连通分量,可以按顶点节点数组顺序,从每个未被访问的节点开始DFS,搜索过的节点设为已经访问过的,每次执行DFS都对计数器w+1即可。
下面增加这两个函数作为邻接表类的public方法。
*邻接表的DFS
template <class ElemType, class WeightType>void AdjListDirNetwork<ElemType, WeightType>::DFS(int v){if(GetTag(v)==UNVISITED)//如果它没有访问过{SetTag(v, VISITED);//访问一下AdjListNetworkArc<WeightType> *p;p = vexTable[v].firstarc;//p从v的第一个相邻节点开始while(p!=NULL){if(GetTag(p->adjVex)==UNVISITED)//如果这个相邻节点没访问过DFS(p->adjVex);//DFS它p=p->nextarc;}}}
*获取连通分量(传给引用w)
template <class ElemType, class WeightType>void AdjListDirNetwork<ElemType, WeightType>::GetFenLiang(int &w){w=0;//初始化计数器//初始化全图for(int v=0;v<vexNum;v++)SetTag(v, UNVISITED);//全都变为没访问过的for(int v=0;v<vexNum;v++)//对于每个顶点{if(GetTag(v)==UNVISITED)//如果没访问过{DFS(v);//DFS之,结束后其整个连通图的节点都将变为VISITEDw++;//如果执行到这里,说明进行了一次必要的DFS,子图显然要+1}}}
加油。
0 0
- 【数据结构笔记】5:图的邻接表结构下求无向图的连通分量
- 数据结构_图_邻接表做存储结构实现求无向图的连通分量_C++实现
- 数据结构--无向图的邻接多重表存储结构
- 计数给定有向邻接表表示的图的连通分量个数
- 【数据结构笔记】6:无向图的邻接多重表存储结构
- SDUT 1488 数据结构实验:连通分量个数(无向图的连通)
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 无向图的连通分量
- 无向图的连通分量
- 无向图的连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 【Shader Forge】Translucency 伪透射shader学习
- 4.12
- linux 简单命令学习
- java写出文件的几种方式:
- ACM 三个数从小到大排序
- 【数据结构笔记】5:图的邻接表结构下求无向图的连通分量
- POS Tag 学习笔记
- chrome 的插件管理地址
- 职场中的实用心理学的学习心得
- 必须要把红黑树讲清楚,看完还不明白请直接找我之2(共四篇)—红黑树的插入
- Hibernate的一级缓存
- javaweb-servlet
- 不正经运维狗的文档12
- jsp实现仿QQ空间新建多个相册名称,向相册中添加照片