分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_Java数据结构——图的深度和广度优先遍历(递归和非递归都有,邻接表和邻接矩阵)...

d9d4740fc0f62c16a76c2504eddceb5a.png
图论是一个很重要的工具,这节主要是图的创建和遍历的Java代码,不讲理论,只撸代码,理论网上很多,具体一步步该怎么走,其他的贴子也都给全了,但是都是c语言,我们用Java实现和模拟图论。

内容有点多,给个目录:

目录:

1. 图结点的创建

2. 图的创建

2.1 图的结构和初始化

2.2 邻接矩阵

2.3 邻接表

3. 邻接表的两种遍历

3.1 深度优先遍历(邻接表)

3.1.1 递归算法(邻接表)

3.1.2 非递归算法(邻接表)

3.2 广度优先遍历(邻接表)

4. 邻接矩阵的两种遍历

4.1 深度优先遍历(邻接矩阵)

4.1.1 递归算法(邻接矩阵)

4.1.2 非递归算法(邻接矩阵)

4.2 广度优先搜索(邻接矩阵)

5. 项目完整代码

1. 图结点的创建

public 

2. 图的创建

2.1 图的结构和初始化

import 

2.2 邻接矩阵

// 邻接矩阵创建(有向图)

2.3 邻接表

// 邻接表创建

3. 邻接表的两种遍历

flag属性用来标记结点有没有被访问过,所以需要初始化。

// 初始化访问标记

3.1 深度优先遍历(邻接表)

3.1.1 递归算法(邻接表)

// 深度优先遍历(从head结点开始) 递归算法 邻接表

3.1.2 非递归算法(邻接表)

用到的栈,定义在文章最后完整项目代码中有,这块只是引用。

// 深度优先遍历(从head结点开始) 非递归算法 邻接表

3.2 广度优先遍历(邻接表)

因为广度优先遍历需要用到队列,所以不能递归,递归只能是用到栈时才能。

用到的队列,定义在文章最后完整项目代码中有,这块只是引用。

void 

4. 邻接矩阵的两种遍历

4.1 深度优先遍历(邻接矩阵)

4.1.1 递归算法(邻接矩阵)

// 深度优先遍历(从0号结点开始) 递归算法 邻接矩阵

4.1.2 非递归算法(邻接矩阵)

用到的栈,定义在文章最后完整项目代码中有,这块只是引用。

// 深度优先遍历(从0号结点开始) 非递归算法 邻接矩阵

4.2 广度优先搜索(邻接矩阵)

因为广度优先遍历需要用到队列,所以不能递归,递归只能是用到栈时才能。

用到的队列,定义在文章最后完整项目代码中有,这块只是引用。

// 广度优先遍历(从0号结点开始) 非递归算法 邻接矩阵

5. 项目完整代码

项目的代码比较多,主要有下面几个类,防止查找麻烦,目录如下:

目录:

  1. class Node 结点定义
  2. class Seqqueue 队列定义
  3. class Seqstack 栈的定义
  4. class Graph 图的定义及操作
  5. class Client 测试类

内容:

  1. //class Node 结点定义
package 

2. //class Seqqueue 队列定义

package 

3. //class Seqstack 栈的定义

package 

4. //class Graph 图的定义及操作

package 

5. //class Client 测试类(里面有邻接表和邻接矩阵 的全部操作测试,需要那个,把剩余的注释就行)

package 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值