图的邻接矩阵存储---JAVA实现
2016-04-26 15:50
447 查看
摘要:
数据结构的一大特点就是用来存储数据的,作为图这种特别复杂的数据结构有三种存储方式,分别是邻接矩阵 邻接表 十字链表三种。本次来讨论邻接矩阵的存储方式。
邻接矩阵的思路:
在邻接矩阵中如果两个节点之间相连则用数字1来进行表示,如果两个节点之间没有边进行连接则用数字0来进行表示。节点初始的时候存储在一个集合或数组当中。二边则存储在一个整形的二维数组当中。
空间复杂度为:
O(n+n^2) 节点数组加二维数组所占用的空间。
这种存储方式的优点及缺点:
优点:存储方式非常清晰,遍历十分容易,存储稠密图的时候非常合适
缺点:当图为稀疏图的时候就不合适了,我们只考虑边的关系而它把有关系和没关系的都存储了起来就不太合适了,浪费空间。
代码:
结果:
数据结构的一大特点就是用来存储数据的,作为图这种特别复杂的数据结构有三种存储方式,分别是邻接矩阵 邻接表 十字链表三种。本次来讨论邻接矩阵的存储方式。
邻接矩阵的思路:
在邻接矩阵中如果两个节点之间相连则用数字1来进行表示,如果两个节点之间没有边进行连接则用数字0来进行表示。节点初始的时候存储在一个集合或数组当中。二边则存储在一个整形的二维数组当中。
空间复杂度为:
O(n+n^2) 节点数组加二维数组所占用的空间。
这种存储方式的优点及缺点:
优点:存储方式非常清晰,遍历十分容易,存储稠密图的时候非常合适
缺点:当图为稀疏图的时候就不合适了,我们只考虑边的关系而它把有关系和没关系的都存储了起来就不太合适了,浪费空间。
代码:
package 邻接矩阵; public class Matrix { private char[] node;//邻接矩阵的点 private int[][] edgs;//邻接矩阵的边的集合 //初始化构建邻接矩阵的方法 public Matrix(char[] node,char[][]edgs){ int nLength = node.length;//获取节点的长度 int eLength = edgs.length;//获取边的长度 this.node = new char[nLength];//初始化邻接矩阵的点 for(int i =0;i<nLength;i++){ this.node[i] = node[i]; } this.edgs = new int[nLength][nLength];//初始化邻接矩阵边的集合 for(int i =0;i<eLength;i++){ //循环遍历获取所有边的起点以及终点 int temp01 = position(edgs[i][0]); //获取边的起点 int temp02 = position(edgs[i][1]); //获取边的终点 this.edgs[temp01][temp02] = 1; } } //查找当前节点所在位置 public int position(char t){ int result = 0; //判断当前节点在节点数组中所在的位置把位置信息返回回去 for(int i=0;i<node.length;i++){ if(t == node[i]){ result = i; } } return result; } //输出 public void print(char[] node,int[][]edgs){ for(int i=0;i<node.length;i++){ System.out.print(" "); System.out.print(node[i]+" "); } System.out.println(); for(int i=0;i<node.length;i++){ System.out.print(node[i]+" "); for(int j=0;j<node.length;j++){ System.out.print(edgs[i][j]+" "); } System.out.println(); System.out.println(); } } public static void main(String[] args){ char[] node = {'A', 'B', 'C', 'D', 'E', 'F', 'G'}; char[][] edgs = new char[][]{ {'A', 'B'}, {'B', 'C'}, {'B', 'E'}, {'B', 'F'}, {'C', 'E'}, {'D', 'C'}, {'E', 'B'}, {'E', 'D'}, {'F', 'G'}}; Matrix m = new Matrix(node,edgs); m.print(node, m.edgs); } }
结果:
相关文章推荐
- java集合框架12——HashMap和HashTable的区别
- struts2的Action(四)
- Java源码之String
- [org.jeecgframework.core.common.exception.MyExceptionHandler]org.springframework.
- LeetCode之位操作题java
- (2.1.25)关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
- lambda表达式
- 设计模式之六大原则——依赖倒置原则(DIP)
- Win7 64位系统下DirectX SDK安装S1023错误解决
- Java Thread 总结
- JPA规范:Java Persistence API 标准规范用法示例
- Java垃圾回收机制
- 使用IBM heapAnalyzer分析内存泄露的原因
- elasticsearch Java API [2.3] » Search API
- Java并发编程:深入剖析ThreadLocal
- spring 技术内幕--IOC初始化过程深入之BeanDefinition的载入和解析1
- java获取两个时间的相隔时间,包括年、月、日、时、分、秒
- [Java并发包学习七]解密ThreadLocal
- java 实现 LINQ 的一些框架记录一下
- 简单工厂模式-Java篇