Java数据结构之图的遍历

本文详细介绍了图的遍历方法,包括广度优先搜索(BFS)和深度优先搜索(DFS)。BFS利用队列,遵循先访问的顶点其邻接点先被访问的原则,而DFS类似于树的先序遍历,采用递归方式访问邻接点。两种方法都需要使用visited数组避免重复访问,并给出了核心思想与代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

核心思想

图的遍历指从图的任意一个顶点出发对图的每个顶点访问且仅访问一次的过程,因为图中可能存在回路,为了避免对一个顶点的重复访问可以增设一个辅助数组visited,初始化为0,一旦第i个顶点被访问,置visited[i]=1。因此,图的遍历需要考虑如下三点:

  1. 指定遍历的第一个顶点。
  2. 由于一个顶点和多个顶点相邻,需要在多个邻接顶点间确定访问次序。
  3. 由于图中存在回路,必须对访问过的顶点做标记,防止出现重复访问同一顶点的情况。

广度优先搜索算法(BFS)

核心思想

BFS遵循“先被访问的顶点,其邻接点先被访问”的规则,因此可以引入队列。
先将起始点加入队列中,以后每次从队列中删除一个数据元素,依次访问它的未被访问的邻接点,并将其插入到队列中,直到队列为空。

  1. 建立标识数组visited[n],并初始化为0,n为顶点个数
  2. 将未访问顶点vi入队
  3. 将队首元素顶点vi从队列中取出,依次访问它的未被访问的邻接点,并将其入队
  4. 重复步骤3,直到队列为空
  5. 改变i的值,跳到步骤2继续执行
代码实现
	//导入包见参考类
	import ch03.LinkQueue;
	
	/**
	 * 广度优先搜索算法BFS(
	 * @param g
	 * @throws Exception
	 */
	public void BFSTraverse(IGraph g) throws Exception{
		visited = new int[g.getVNum()];
		for(int i=0;i<g.getVNum();i++) {
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值