#ifndef INC_05_DFS_AND_COMPONENTS_COMPONENTS_H
#define INC_05_DFS_AND_COMPONENTS_COMPONENTS_H
#include<iostream>
#include<cassert>
using namespace std;
template<typename Graph>
class Component{
private:
Graph &G; //传入图的引用
bool *visited; //记录是否被访问过
int ccount; //记录联通分支的个数
int *id; //记录在哪个联通分支里
//深度优先遍历
void dfs(int v){ //对v节点进行深度优先遍历
visited[v]=true; //设定该节点访问过
id[v]=ccount;
typename Graph::adjIterator adj(G,v); //显式声明adjIterator为Graph中一个类型
for(int i=adj.begin();!adj.end();i=adj.next()){
if(!visited[i])
dfs(i);
}
}
public:
Component(Graph &graph):G(graph){
//初始化
visited=new bool[G.V()];
id=new int[G.V()];
ccount=0;
for(int i=0;i<G.V();i++){
visited[i]=false;
id[i]=-1;
}
for(int i=0;i<G.V();i++){
if(!visited[i]){
dfs(i); //将与i和i相邻近的节点全都遍历一遍
ccount++;
}
}
}
~Component(){
delete[] visited;
delete[] id;
}
int count(){
return ccount;
}
//检验是否有边
bool isConnected(int v,int w){
assert(v>=0&&v<G.V());
assert(w>=0&&w<G.V());
return id[v]==id[w];
}
};
#endif //INC_05_DFS_AND_COMPONENTS_COMPONENTS_H
图——连通分量与深度优先遍历
原文作者:数据结构之图
原文地址: https://blog.csdn.net/draper__QYT/article/details/78396066
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/draper__QYT/article/details/78396066
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。