Java实现有向图Graph, 以及深度优先遍历(DFS), 广度优先遍历(BFS)

原视频链接:https://www.bilibili.com/video/BV1254y1976m.

有向图的实现(Directed Graph)

有向图的实现有两种,一种是用矩阵(Matrix)的形式来实现,另一种是用链表(List)的形式来实现。

如果我们使用矩阵来实现有向图,来看一个例子:
在这里插入图片描述

每行代表相应的顶点,如果M[i][j] = 1,那么就代表顶点 i 连向 j,如果是0,则表达顶点间没有联系。用矩阵的方式来实现图的优势很明显,我们可以很快地判断两个顶点之间是否相连,可是用矩阵实现的时间复杂度很高,我们需要O(V^2)来记录所有的数据,不管顶点之间是否有相连线。为了解决时间复杂度的问题,我们可以使用链表的方式来实现图:
在这里插入图片描述

在链表实现中,我们实际上使用了储存链表的数组来表示图,图的左侧用数组来实现,代表我们的所有顶点,而每个顶点含有一个链表,链表上储存了该顶点指向的顶点。以下是Java的实现代码:

这是邻接表数组的数据结构代码:

import java.util.ArrayList;

public class ListGraph {
   
	 ArrayList<ArrayList<Integer>> graphs;//定义一个邻接表数组graphs
	 //ArrayList(此处是顶点)<ArrayList<Integer>(此处是顶点连接的链表)>

	    public ListGraph(int v) {
   //有参构造方法 ,v是顶点的数量
	        graphs = new ArrayList<>(v);
	        for (int i = 0; i < v; i++) {
   
	            graphs.add(new ArrayList<>());//给每个顶点连接一个链表,构成邻接表这一数据结构。
	        }
	    }

	    public void addEdge(int start, int end) {
   //添加一条从start到end的边
	        graphs.get(start).add(end);//
	    }

	    public void removeEdge
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值