图论——图的邻接表实现——Java语言(完整demo)
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
最新文章
- 正则匹配抓取input 隐藏输入项和 <;td>;标签内的内容
- HTML5第一讲
- Python高手之路【八】python基础之requests模块
- JS传中文到后台需要的处理
- hdu1078 bfs
- MySQL 5 绿色版(BAT版本) mysql50green转自http://hi.baidu.com/dburu/blog/item/e753fcc4362458aa8226accb.htmlMySQL 5 绿色版(BAT版本) By )
- LinearLayout和RelativeLayout
- Asp.net Response.Redirect with post data
- python 数字类型
- Cordic算法——verilog实现
- java HotSpot 内存管理白皮书
- 一条SQL生成数据字典
- python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
- angular 4 router传递数据三种方法
- Python--logging模块不同级别写入到不同文件
- 2017-11-4&mdash;LTspice
- linux 不允许多线程共享sqlite句柄
- 如何免费下载付费音乐歌曲,6个网站+8个APP
- zabbix3.4.7官方解释触发器
- Python-pycurl模块的安装
热门文章
- 最小配置启动SQL SERVER,更改SQL Server最大内存大小导致不能启动的解决方法
- Linux yum 命令篇
- mysql数据库问题———登录进去无法操作显示You must reset your password using ALTER USER statement before executing this statement
- H264 RTP包解析
- RabbitMq学习2-php命令行模式测试rabbitmq
- 03: 使用docker搭建Harbor私有镜像仓库
- 工作笔记之20170223:①关于Html5的placeholder属性,②以及input的outline:none的样式问题
- 错误: JMX 连接器服务器通信错误: service:jmx:rmi://***
- GitHub入门使用
- 关于微信小程序 modal弹框组件的介绍