dfs 递归的方法

  public void explore(int v) {
        	visited[v]=true;  //结点v已经被遍历了
        	for(int i=0;i<verticesnumber;i++) {    
        		if(arcs[v][i]==1 && (visited[i]==false)) {   //如果下一个结点和上一个结点有连接的话(连接为1,不连接为0),那么arcs[v][i]==1,并且这个结点还未遍历的话,就再进行一次遍历,这里指的是一条树走下来,只遍历了一条,只是图中的冰山一角
        			explore(i);
        		}
        	}
        }
        public void dfs() {         //这里就是dfs的方法,不过是要根据上面的explore来做的,毕竟要从小到大
        	for(int i=0;i< verticesnumber;i++) {    
        		visited[i]=false;         //遍历一圈,先进行初始化,都是未遍历的状态,也可以删掉
        		
        	}
        	for(int j=0;j< verticesnumber;j++) {
        		if(visited[j]==false) {     //遍历所有的顶点,如果结点处于未遍历的状态,那就按章explore的方法来进行遍历
        			explore(j);
        		}
        	}
        }

这里的verticesnumber都是图Graph中的结点个数,因为要遍历的是整个图的结点

if(visited[j]==false)   和    visited[i]=false;  有本质上的区别,需要进行特别的注意

以上不过只是方法,并不是完整的dfs实现代码,还需要加入一整个图Graph,结点信息,结点数量,边的信息,以及boolean对visited的判断

这是dfs的递归实现方法

还有dfs的栈实现方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值