图的深度优先遍历和广度优先遍历(java实现)

一.图的深度优先遍历

1.基本思想
从初始访问节点出发,首先访问第一个节点,然后再以这个被访问的节点的邻接节点作为初始节点,访问它的第一个邻接节点,依次进行,显然这是一个递归的过程
2.算法步骤
1)访问初始节点v,并标记节点v以访问
2)查找节点v的第一个邻接节点w
3)若w存在,执行4,若w不存在,回到第一步,从v的下一个节点继续
4)若w未被访问,对w进行深度优先遍历递归
5)若w被访问,以下一个邻接节点作为初始节点进行递归
3.代码实现

//得到第一个结点的下标
	public int getfirstNeighbor(int index){
   
		for(int j=0;j<vertexList.size();j++){
   
			if(edges[index][j]>0){
   
				return j;
			}
		}
		return -1;
	}
	
	//根据前一个邻接节点的下标来获取下一个邻接节点
	public int getNextNeighbor(int v1,int v2){
   
		for(int j=v2+1;j<vertexList.size();j++){
   
			if(edges[v1][j]>0){
   
				return j;
			}
		}
		return -1;
	}
	
	//深度优先遍历
	/* isVisited[] 记录节点是否访问的数组
	 * i 第一次是0
	 */
	public void dfs(boolean[] isVisited,int i){
   
		//首先访问该节点,输出
		System.out.print(getValueByIndex(i)+"->");
		isVisited[i]=true;
		int w=getfirstNeighbor(i);
		while(w!=-1){
   
			//说明有邻接节点
			if(!isVisited[w]){
   
				dfs(isVisited,w);
			}
			
			//如果该节点被访问
			w=getNextNeighbor(i,w);
		}
	}
	
	//重载dfs方法
	public void dfs(){
   
		isVisited=new boolean[vertexList.size()];
		//遍历所有的节点进行dfs回溯
		for(int i=0;i<vertexList.size();i++){
   
			if(!isVisited[i]){
   
				dfs(isVisited,i);
			}
		}
	
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深度优先遍历广度优先遍历的两种常见遍历算法深度优先遍历(DFS)是一种递归算法,它从中的某个节点开始,首先访问该节点,然后遍历该节点的所有邻接节点,再依次对每个邻接节点进行深度优先遍历。换句话说,DFS会沿着的一条路径一直往下遍历,直到遇到没有未访问过的邻接节点为止,再返回上一级节点继续遍历其他未访问过的节点。DFS的实现一般使用递归或栈来保存待访问节点。 广度优先遍历(BFS)是一种队列的算法,它从中的某个节点开始,首先访问该节点,然后遍历该节点的所有邻接节点,并将这些邻接节点加入队列中。接下来从队列中取出一个节点,再依次遍历该节点的邻接节点,并将未访问过的邻接节点加入队列中,如此往复直到队列为空。BFS的实现一般使用队列来保存待访问节点。 在视频中,可以演示通过的邻接矩阵或邻接表的形式来表示,并使用Java代码来实现深度优先遍历广度优先遍历。对于深度优先遍历,可以从中的某个节点开始递归遍历它的邻接节点,并使用一个标记数组来记录节点是否已经访问过。对于广度优先遍历,可以使用一个队列来按照广度优先的顺序遍历中的节点,并同样使用标记数组来记录节点是否已经访问过。 通过这个视频,观众可以了解到深度优先遍历广度优先遍历的原理和实现方法,并通过代码示例更好地理解其过程。这些算法遍历、路径查找等问题中应用广泛,对于理解和解决相关问题具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值