1、图的简单实现方法——邻接矩阵

表示图的一种简单的方法是使用一个一维数组和一个二维数组,称为领接矩阵(adjacent matrix)表示法。
对于每条边(u,v),置A[u,v]等于true;否则,数组的元素就是false。如果边有一个权,那么可以置A[u][v]等于该权,而使用一个很大或者很小的权来标记不存在的边。虽然这样表示非常简单,但是,它的空间需求则为θ(|V|2),如果图的边不是很多,那么这种表示的代价就太大了。若图是稠密(dense)的:|E|=θ(|V|2),则领接矩阵是合适的表示方法。但大多数情况下并非如此。无向图用邻接矩阵表示会浪费一半的空间,稀疏的有向图用邻接矩阵表示会浪费大部分空间,稠密的有向图适合用邻接矩阵表示。

2、图的优化实现方法——邻接表

如果图是稀疏的(sparse),那么更好的解决方法是使用邻接表(adjacency
list)表示。邻接表是一个二维容器,第一维是一个数组,存储所有顶点,第二维是链表,存储所有与这个点领接的点集。此时的空间需求为O(|E|+|V|),它相对于图的大小而言是线性的。

邻接表是表示图的标准方法。无向图可以以类似的方法表示,但每条边将会出现在两个表中,造成空间的双倍冗余。

实现邻接表的方法有很多,基本的选择有两个:一、使用一个映射,在这个映射下,武汉英语学校关键字是顶点,值是那些邻接表。二、关键字是顶点,值是一个包含链的类Vertex。

图的邻接矩阵实现比较简单,这里我们只展示图的邻接表实现方式。

图的邻接表实现总共有3个类,它们分别是:

  • 图的顶点的类:Vertex.java
  • 图的边类:Edge.java
  • 图类:Graph.java

此外,还有一个测试类Test,以方便验证图的构建是否成功,下面是完整的实现代码。

顶点类Vertex:

边类Edge

图类Graph:

测试类Test:

测试结果:

上述实例已经同步到Github,遇到问题的同学可以克隆下来直接运行,链接是:https://github.com/Dodozhou/Algorithm/tree/master/src/main/java/dataStructure/graph/graph_ve

最新文章

  1. 正则匹配抓取input 隐藏输入项和 <td>标签内的内容
  2. HTML5第一讲
  3. Python高手之路【八】python基础之requests模块
  4. JS传中文到后台需要的处理
  5. hdu1078 bfs
  6. MySQL 5 绿色版(BAT版本) mysql50green转自http://hi.baidu.com/dburu/blog/item/e753fcc4362458aa8226accb.htmlMySQL 5 绿色版(BAT版本) By )
  7. LinearLayout和RelativeLayout
  8. Asp.net Response.Redirect with post data
  9. python 数字类型
  10. Cordic算法——verilog实现
  11. java HotSpot 内存管理白皮书
  12. 一条SQL生成数据字典
  13. python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
  14. angular 4 router传递数据三种方法
  15. Python--logging模块不同级别写入到不同文件
  16. 2017-11-4—LTspice
  17. linux 不允许多线程共享sqlite句柄
  18. 如何免费下载付费音乐歌曲,6个网站+8个APP
  19. zabbix3.4.7官方解释触发器
  20. Python-pycurl模块的安装

热门文章

  1. 最小配置启动SQL SERVER,更改SQL Server最大内存大小导致不能启动的解决方法
  2. Linux yum 命令篇
  3. mysql数据库问题———登录进去无法操作显示You must reset your password using ALTER USER statement before executing this statement
  4. H264 RTP包解析
  5. RabbitMq学习2-php命令行模式测试rabbitmq
  6. 03: 使用docker搭建Harbor私有镜像仓库
  7. 工作笔记之20170223:①关于Html5的placeholder属性,②以及input的outline:none的样式问题
  8. 错误: JMX 连接器服务器通信错误: service:jmx:rmi://***
  9. GitHub入门使用
  10. 关于微信小程序 modal弹框组件的介绍