Java编程实现深度优先遍历与连通分量代码示例

  

<强>深度优先遍历
  

  

深度优先遍历类似于一个人走迷宫:

  

癑ava编程实现深度优先遍历与连通分量代码示例"

  

如图所示,从起点开始选择一条边走到下一个顶点,没到一个顶点便标记此顶点已到达。

  

当来到一个标记过的顶点时回退到上一个顶点,再选择一条没有到达过的顶点。

  

当回退到的路口已没有可走的通道时继续回退。

  

而<>强连通分量强,看概念:无向图G的极大连通子图称为G的连通分量(连接组件)。任何连通图的连通分量只有一个,即是其自身,非连通的无向图有多个连通分量。

  

下面看看具体实例:

        包com.dataStructure.graph;//求无权图的联通分量   公共类组件{   私人图图;//存放输入的数组   私人布尔[]访问;//存放节点被访问状态   私人int componentCount;//连通分量的数量   私人int[]马克;//存储节点所属联通分量的标记//构造函数,初始化私有属性   公共组件(图图){   这一点。图=图;   componentCount=0;//连通分量初始数量为0   访问=新布尔[graph.V ()];   马克=new int [graph.V ());   for (int i=0;我& lt;graph.V ();我+ +){   参观了[我]=false;//节点初始访问状态为假   马克[我]=1;//节点初始连通分量标记为1   }   for (int i=0;我& lt;graph.V ();我+ +){//对于未被访问的节点进行dfs深度优先遍历   如果(!访问[我]){   dfs(我);   componentCount + +;//对一个节点进行dfs到底后,一个连通分量结束,数量+ 1   }   }   }   私人空间dfs (int i) {   参观了[我]=true;//节点我已被访问   马克[我]=componentCount;//节点我属于当前连通分量的数量(标记)   (int节点:graph.adjacentNode(我)){//遍历图中节点我的邻接节点   如果访问(节点)(!)//对未被访问的邻接节点进行dfs   dfs(节点);   }   }   公共布尔与(int, int w) {   返回马克马克[w]; [v]==//根据两节点所属连通分量的标记判断两节点是否相连   }   公共int getComponentCount () {   返回componentCount;//返回图中连通分量的数量   }   }   {//公共类组件////私有图G;//图的引用//私布尔[]访问;//记录dfs的过程中节点是否被访问//私人int平仓;//记录联通分量个数//私人int [] id;//每个节点所对应的联通分量标记//////图的深度优先遍历//私人空dfs (int v) {////访问[v]=true;//节点v的访问状态置为真实的//id [v]=平仓;//节点v对应的联通标记设置为平仓//////遍历节点v的邻接我点//(int i: G.adjacentNode (v)) {////如果邻接点我尚未被访问//如果(!访问[我])////对邻接点我进行深度优先遍历//dfs(我);//}//}//////构造函数,求出无权图的联通分量//公共组件(图图){//////算法初始化//G=图;//////访问数组存储图G中节点的被访问状态//访问=新布尔[G.V ());//////id数组存储图G中节点所属连通分量的标记//id=new int [G.V ());//////连通分量数量初始化为0//平仓=0;//////将访问数组全部置为假;id数组全部置为1//(int i=0;我& lt;G.V ();我+ +){//访问[我]=false;//id[我]=1;//}//////求图的联通分量//(int i=0;我& lt;G.V ();我+ +)////访问一个未曾被访问的节点//如果(!访问[我]){////对其进行深度优先遍历//dfs(我);//平仓+ +;//}//}//////返回图的联通分量个数//int数(){//返回平仓;//}//////查询点v和点w是否联通(节点v和w的联通分量的标记是否相同   v//布尔与(int, int w) {//维护v祝辞=0,,v & lt;G.V ();//维护w祝辞=0,,w & lt;G.V ();//返回id [v]==id [w];//}//}      

癑ava编程实现深度优先遍历与连通分量代码示例"

  

癑ava编程实现深度优先遍历与连通分量代码示例"

  

通分量数量为3

  

  

以上就是本文关于Java编程实现深度优先遍历与连通分量代码示例的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出。关注,您会有更多收获。

Java编程实现深度优先遍历与连通分量代码示例